PHP做爲一門web開發語言,一般狀況下咱們都是在Web Server中運行PHP,使用瀏覽器訪問,所以不多關注其命令行操做以及相關參數的使用,可是,特別是在類Unix操做系統上,PHP能夠做爲一門腳本語言執行與shell
相似的處理任務。php
查看PHP的全部命令行參數,使用php -h
命令。咱們將會對大部分經常使用的命令行參數進行一一解釋,以加深對PHP能力的認識,更加快捷的在服務端命令行下使用PHP或者調試各類由於對環境不熟悉而出現的問題。html
-a 以交互式shell模式運行 -c <path>|<file> 指定php.ini文件所在的目錄 -n 指定不使用php.ini文件 -d foo[=bar] 定義一個INI實體,key爲foo,value爲'bar' -e 爲調試和分析生成擴展信息 -f <file> 解釋和執行文件<file>. -h 打印幫助 -i 顯示PHP的基本信息 -l 進行語法檢查 (lint) -m 顯示編譯到內核的模塊 -r <code> 運行PHP代碼<code>,不須要使用標籤 <?..?> -B <begin_code> 在處理輸入以前先執行PHP代碼<begin_code> -R <code> 對輸入的沒一行做爲PHP代碼<code>運行 -F <file> Parse and execute <file> for every input line -E <end_code> Run PHP <end_code> after processing all input lines -H Hide any passed arguments from external tools. -S <addr>:<port> 運行內建的web服務器. -t <docroot> 指定用於內建web服務器的文檔根目錄<docroot> -s 輸出HTML語法高亮的源碼 -v 輸出PHP的版本號 -w 輸出去掉註釋和空格的源碼 -z <file> 載入Zend擴展文件 <file>. args... 傳遞給要運行的腳本的參數. 當第一個參數以`-`開始或者是腳本是從標準輸入讀取的時候,使用`--`參數 --ini 顯示PHP的配置文件名 --rf <name> 顯示關於函數 <name> 的信息. --rc <name> 顯示關於類 <name> 的信息. --re <name> 顯示關於擴展 <name> 的信息. --rz <name> 顯示關於Zend擴展 <name> 的信息. --ri <name> 顯示擴展 <name> 的配置信息.
上面列出了PHP命令全部的參數及其註釋,接下來,咱們將對其中比較經常使用的參數舉例說明。python
用過 Python 的朋友對Python的交互式shell比較熟悉,在命令行下,若是咱們直接輸入python
命令,則會進入python
的交互式shell程序,接下來就能夠交互式的執行一些計算任務。web
在PHP命令行中,一樣提供了相似的功能,使用-a
參數便可進入交互shell模式。redis
在該shell中,咱們能夠執行一些簡單的任務,而不須要老是新建一個php文件。shell
更詳細的使用說明,請參考官方文檔api
從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; charset=UTF-8 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 <name> 顯示關於函數 <name> 的信息. --rc <name> 顯示關於類 <name> 的信息. --re <name> 顯示關於擴展 <name> 的信息. --rz <name> 顯示關於Zend擴展 <name> 的信息. --ri <name> 顯示擴展 <name> 的配置信息.
例如,咱們但願查看擴展redis
的配置信息
$ php --ri redis redis Redis Support => enabled Redis Version => 2.2.7
查看redis
類的信息
$ php --rc redis Class [ <internal:redis> class Redis ] { - Constants [19] { Constant [ integer REDIS_NOT_FOUND ] { 0 } ... - Methods [201] { ... Method [ <internal:redis> public method echo ] { } ...
查看函數printf
的信息
$ php --rf printf Function [ <internal:standard> function printf ] { - Parameters [2] { Parameter #0 [ <required> $format ] Parameter #1 [ <optional> ...$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
參考文獻