php命令列(CLI)參數詳解
以互動式shell模式執行php
運行內建的Web伺服器
尋找PHP的設定檔
查看類別/函數/擴充資訊
語法檢查
#命令列腳本開發
PHP作為一門web開發語言,通常情況下我們都是在Web Server中運行PHP,使用瀏覽器訪問,因此很少關注其命令行操作以及相關參數的使用,但是,特別是在類Unix作業系統上,PHP可以作為一門腳本語言執行與shell類似的處理任務。
查看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指令所有的參數及其註釋,接下來,我們將對其中比較常用的參數舉例說明。
用過Python 的朋友對Python的互動式shell比較熟悉,在命令列下,如果我們直接輸入python指令,則會進入python的互動式shell程序,接下來就可以互動式的執行一些計算任務。
在PHP命令列中,同樣提供了類似的功能,使用-a參數即可進入交互shell模式。
在該shell中,我們可以執行一些簡單的任務,而不需要總是新建一個php檔案。
更詳細的使用說明,請參考官方文件
從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命令列參數中,提供了–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 'echo' (T_ECHO) in index.php on line 3 Parse error: syntax error, unexpected 'echo' (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 '命令行参数个数: ' . $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 'echo php_sapi_name(), PHP_EOL;' cli
参考文献
Using PHP from the command line
以上是PHP命令列的詳細內容。更多資訊請關注PHP中文網其他相關文章!