PHP 的命令行模式
從版本 4.3.0 開始,PHP 提供了一種新類型的 SAPI(Server Application Programming Interface,服務端應用編程端口)支持,名為 CLI,意為 Command Line Interface,即命令行接口。顧名思義,該 SAPI 模塊主要用作 PHP 的開發外殼應用。CLI SAPI 和其它 SAPI 模塊相比有很多的不同之處,我們將在本章中詳細闡述。值得一提的是,CLI 和 CGI 是不同的 SAPI,盡管它們之間有很多共同的行為。 CLI SAPI 最先是隨 PHP 4.2.0 版本發布的,但仍舊只是一個實驗性的版本,並需要在運行 ./configure 從 PHP 4.3.0開始,CLI/CGI 二進制執行文件的文件名、位置和是否存在會根據 PHP 在您系統上的安裝而不同。在默認情況下,當運行 make 時,CGI 和 CLI 都會被編譯並且分別放置在您 PHP 源文件目錄的 sapi/cgi/php和 sapi/cli/php 下。您可以註意到兩個文件都被命名為了 php。在 make install 的過程中會發生什麽取決於您的配置行。如果在配置的時候選擇了一個 SAPI 模塊,如 apxs,或者使用了 --disable-cgi
在 PHP 4.2.0 到 PHP 4.2.3 之間的 Windows 發行包中,CLI 的文件名為 php-cli.exe,相同文件夾下的 php.exe 為 CGI。從 PHP 4.3.0 版本開始,Windows 的發行包中 CLI 的執行文件為 php.exe,被放置在一個單獨的名為 cli 的文件夾下,即 cli/php.exe。
以下為 CLI SAPI 和其它 SAPI 模塊相比的顯著區別:
以下是 PHP 二進制文件(即 php.exe 程序)提供的命令行模式的選項參數,您隨時可以通過 PHP -h 命令來查詢這些參數。
CLI SAPI 模塊有以下三種不同的方法來獲取您要運行的 PHP 代碼:
以上三種運行代碼的方法不能同時使用。 和所有的外殼應用程序一樣,PHP 的二進制文件(php.exe 文件)及其運行的 PHP 腳本能夠接受一系列的參數。PHP 沒有限制傳送給腳本程序的參數的個數(外殼程序對命令行的字符數有限制,但您通常都不會超過該限制)。傳遞給您腳本的參數可在全局變量 $argv 中獲取。該數組中下標為零的成員為腳本的名稱(當 PHP 代碼來自標準輸入獲直接用 -r 參數以命令行方式運行時,該名稱為“-”)。另外,全局變量 $argc 存有 $argv 數組中成員變量的個數(而非傳送給腳本程序的參數的個數)。 只要您傳送給您腳本的參數不是以 - 符號開頭,您就無需過多的註意什麽。向您的腳本傳送以 - 開頭的參數會導致錯誤,因為 PHP 會認為應該由它自身來處理這些參數。您可以用參數列表分隔符 -- 來解決這個問題。在 PHP解析完參數後,該符號後所有的參數將會被原樣傳送給您的腳本程序。
除此之外,我們還有另一個方法將 PHP 用於外殼腳本。您可以在寫一個腳本,並在第一行以 #!/usr/bin/php 開頭,在其後加上以 PHP 開始和結尾標記符包含的正常的 PHP 代碼,然後為該文件設置正確的運行屬性。該方法可以使得該文件能夠像外殼腳本或 PERL 腳本一樣被直接執行。
假設改文件名為 test 並被放置在當前目錄下,我們可以做如下操作:
正如您所看到的,在您向該腳本傳送以 - 開頭的參數時,腳本仍然能夠正常運行。
表格 23-3. 命令行選項
PHP 的命令行模式能使得 PHP 腳本能完全獨立於 WEB 服務器單獨運行。如果您使用 Unix 系統,您需要在您的 PHP 腳本的最前面加上一行特殊的代碼,使得它能夠被執行,這樣系統就能知道用什麽樣的程序要運行該腳本。在 Windows 平臺下您可以將 php.exe 和 .php 文件的雙擊屬性相關聯,您也可以編寫一個批處理文件來用 PHP 執行腳本。為 Unix 系統增加的第一行代碼不會影響該腳本在 Windows 下的運行,因此您也可以用該方法編寫跨平臺的腳本程序。以下是一個簡單的PHP 命令行程序的範例。
在以上腳本中,我們用第一行特殊的代碼來指明該文件應該由 PHP 來執行。我們在這裏使用 CLI 的版本,因此不會有 HTTP 頭信息輸出。在您用 PHP 編寫命令行應用程序時,您可以使用兩個參數:$argc 和 $argv。前面一個的值是比參數個數大 1 的整數(運行的腳本本身的名稱也被當作一個參數)。第二個時包含有參數的數組,其第一個元素為腳本的名稱,下標為數字 0($argv[0])。 在以上程序中我們檢查了參數的個數是大於 1 個還是小於 1 個。即時參數是 --help、-help、-h 或 -?,我們仍然打印出幫助信息,並同時動態輸出腳本的名稱。如果還收到了其它參數,我們也把它們顯示出來。 如果您希望在 Unix 下運行以上腳本,您需要使得它成為可執行腳本,然後簡單的運行 script.php echothis 或 script.php -h。在 Windows 下,您可以為此編寫一個批處理文件:
假設您將上述程序命名為 script.php,且您的 CLI php.exe 文件放置在 c:\php\cli\php.exe,該批處理文件會幫助您將附加的參數傳給腳本程序: script.bat echothis 或 script.bat -h。 |
PHP 的命令行模式