PHP命令列

炎欲天舞
發布: 2023-03-15 12:44:02
原創
11322 人瀏覽過


  • php命令列(CLI)參數詳解

    • 以互動式shell模式執行php

    • 運行內建的Web伺服器

    • 尋找PHP的設定檔

    • 查看類別/函數/擴充資訊

    • 語法檢查

  • #命令列腳本開發

PHP作為一門web開發語言,通常情況下我們都是在Web Server中運行PHP,使用瀏覽器訪問,因此很少關注其命令行操作以及相關參數的使用,但是,特別是在類Unix作業系統上,PHP可以作為一門腳本語言執行與shell類似的處理任務。

php命令列(CLI)參數詳解

查看PHP的所有命令列參數,使用php -h指令。我們將會對大部分常用的命令列參數進行一一解釋,以加深對PHP能力的認識,更快捷的在服務端命令列下使用PHP或調試各種因為對環境不熟悉而出現的問題。

-a               以交互式shell模式运行
-c | 指定php.ini文件所在的目录
-n               指定不使用php.ini文件
-d foo[=bar]     定义一个INI实体,key为foo,value为'bar'
-e               为调试和分析生成扩展信息
-f         解释和执行文件.
-h               打印帮助
-i               显示PHP的基本信息
-l               进行语法检查 (lint)
-m               显示编译到内核的模块
-r         运行PHP代码,不需要使用标签 ..?>
-B   在处理输入之前先执行PHP代码
-R         对输入的没一行作为PHP代码运行
-F         Parse and execute  for every input line
-E     Run PHP  after processing all input lines
-H               Hide any passed arguments from external tools.
-S : 运行内建的web服务器.
-t      指定用于内建web服务器的文档根目录
-s               输出HTML语法高亮的源码
-v               输出PHP的版本号
-w               输出去掉注释和空格的源码
-z         载入Zend扩展文件 .
 
args...          传递给要运行的脚本的参数. 当第一个参数以-开始或者是脚本是从标准输入读取的时候,使用--参数
 
--ini            显示PHP的配置文件名
 
--rf       显示关于函数  的信息.
--rc       显示关于类  的信息.
--re       显示关于扩展  的信息.
--rz       显示关于Zend扩展  的信息.
--ri       显示扩展  的配置信息.
登入後複製

上面列出了PHP指令所有的參數及其註釋,接下來,我們將對其中比較常用的參數舉例說明。

以互動式shell模式運行php

用過Python 的朋友對Python的互動式shell比較熟悉,在命令列下,如果我們直接輸入python指令,則會進入python的互動式shell程序,接下來就可以互動式的執行一些計算任務。

在PHP命令列中,同樣提供了類似的功能,使用-a參數即可進入交互shell模式。

在該shell中,我們可以執行一些簡單的任務,而不需要總是新建一個php檔案。

更詳細的使用說明,請參考官方文件

運行內建的Web伺服器

從PHP 5.4.0開始,PHP的命令列模式提供了一個內建的web伺服器。使用-S開始運行web服務。

假設目前我們處在目錄/Users/mylxsw/codes/php/aicode/demo,在該目錄中,存在index.php檔案。

$ ls
index.php
$ cat index.php
<?php echo "Hello, PHPER!";
登入後複製

在該目錄中,執行以下命令可以啟動內建web伺服器,並且預設以當前目錄為工作目錄

$ php -S localhost:8000
PHP 5.6.3 Development Server started at Wed Jun 10 15:49:41 2015
Listening on http://localhost:8000
Document root is /Users/mylxsw/codes/php/aicode/demo
Press Ctrl-C to quit.
登入後複製

我們另外開啟一個shell窗口,請求http://localhost:8000/即可看到腳本輸出

$ curl -is http://localhost:8000/
HTTP/1.1 200 OK
Host: localhost:8000
Connection: close
X-Powered-By: PHP/5.6.3
Content-type: text/html;
 
Hello, PHPER!
登入後複製

在web服務運行的窗口,可以看到輸出的日誌資訊

以上我們在啟動內建造伺服器的時候,只指定了-S參數讓PHP以web伺服器的方式運行,這時,PHP會使用當前目錄作為工作目錄,因此回到當前目錄下尋找請求的文件,我們還可以使用-t參數指定其它的目錄作為工作目錄(文檔根目錄)。

更多詳細信息,請參考官方文件。

查找PHP的設定檔

在有的時候,由於伺服器上軟體安裝比較混亂,我們可能安裝了多個版本的PHP環境,這時候,如何定位我們的PHP程序使用的是那個設定檔就比較重要了。在PHP命令列參數中,提供了–ini參數,使用該參數,可以列出目前PHP的設定檔資訊。

$ php --ini
Configuration File (php.ini) Path: /usr/local/etc/php/5.6
Loaded Configuration File:         /usr/local/etc/php/5.6/php.ini
Scan for additional .ini files in: /usr/local/etc/php/5.6/conf.d
Additional .ini files parsed:      (none)
 
$ /usr/local/php/bin/php --ini
Configuration File (php.ini) Path: /usr/local/php/etc/
Loaded Configuration File:         /usr/local/php/etc/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)
登入後複製

上述的伺服器上我們安裝了兩個版本的PHP,由上可以看到,使用php –ini指令可以很方便的定位目前PHP指令將會採用哪個設定檔。

查看類別/函數/擴充資訊

通常,我們可以使用php –info指令或在在web伺服器上的php程式中使用函數phpinfo()顯示php的信息,然後再尋找相關類別、擴充或函數的信息,這樣做實在是麻煩了一些。

$ php --info | grep redis
redis
Registered save handlers => files user redis
This program is free software; you can redistribute it and/or modify
登入後複製

我們可以使用下列參數更方便的查看這些資訊

--rf       显示关于函数  的信息.
--rc       显示关于类  的信息.
--re       显示关于扩展  的信息.
--rz       显示关于Zend扩展  的信息.
--ri       显示扩展  的配置信息.
登入後複製

例如,我們希望查看擴充redis的設定資訊

$ php --ri redis
 
redis
 
Redis Support => enabled
Redis Version => 2.2.7
登入後複製

#查看redis類別的資訊

$ php --rc redis
Class [  class Redis ] {
 
  - Constants [19] {
    Constant [ integer REDIS_NOT_FOUND ] { 0 }
    ...
  - Methods [201] {
    ...
    Method [  public method echo ] {
    }
    ...
登入後複製

查看函數printf的資訊

$ php --rf printf
Function [  function printf ] {
 
  - Parameters [2] {
    Parameter #0 [  $format ]
    Parameter #1 [  ...$args ]
  }
}
登入後複製

語法檢查

有時候,我們只需要檢查php腳本是否存在語法錯誤,而不需要執行它,例如在一些編輯器或IDE中檢查PHP檔案是否有語法錯誤。

使用-l(–syntax-check)可以只對PHP檔案進行語法檢查。

$ php -l index.php
No syntax errors detected in index.php
登入後複製

假如此時我們的index.php中存在語法錯誤

$ php -l index.php
PHP Parse error:  syntax error, unexpected &#39;echo&#39; (T_ECHO) in index.php on line 3
 
Parse error: syntax error, unexpected &#39;echo&#39; (T_ECHO) in index.php on line 3
Errors parsing index.php
登入後複製

命令列腳本開發

在使用PHP開發命令列腳本的時候,與開發web程式是明顯不同的,在web程式中,我們可以透過改變url的參數,為PHP環境提供不同的輸入,但是在命令列腳本程式中如何取得外部的輸入呢?

在使用C语言开发程序时,我们通常会在main函数中提供两个可选的参数int main(int argc, char *argv[]),这两个参数就是从命令行提供的输入参数。在PHP中,提供了两个全局变量$argc和$argv用于获取命令行输入。

  • $argc 包含了 $argv数组包含元素的数目

  • $argv 是一个数组,包含了提供的参数,第一个参数总是脚本文件名称

假设我们有一个名为console.php的命令行脚本文件

<?php echo &#39;命令行参数个数: &#39; . $argc . "n";
echo "命令行参数:n";
foreach ($argv as $index => $arg) {
    echo "    {$index} : {$arg}n";
}
登入後複製

在命令行下执行该脚本

$ php console.php hello world
命令行参数个数: 3
命令行参数:
    0 : console.php
    1 : hello
    2 : world
登入後複製

可以看到,第0个参数是我们执行的脚本名称。需要注意的是,如果提供的第一个参数是以-开头的话,需要在前面增加–,以告诉php这后面的参数是提供给我们的脚本的,而不是php执行文件的(php -r ‘var_dump($argv);’ — -h)。

另外,在脚本中,我们可以通过php_sapi_name()函数判断是否是在命令行下运行的

$ php -r &#39;echo php_sapi_name(), PHP_EOL;&#39;
cli
登入後複製

参考文献

  • Using PHP from the command line

以上是PHP命令列的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!