以下為 CLI SAPI 和其它 SAPI 模塊相比的顯著(zhù)區別:
與 CGI SAPI 不同,其輸出沒(méi)有任何頭信息。
盡管 CGI SAPI 提供了取消 HTTP 頭信息的方法,但在 CLI SAPI 中并不存在類(lèi)似的方法以開(kāi)啟 HTTP 頭信息的輸出。
CLI 默認以安靜模式開(kāi)始,但為了保證兼容性,-q 和 --no-header 參數為了向后兼容仍然保留,使得可以使用舊的 CGI 腳本。
在運行時(shí),不會(huì )把工作目錄改為腳本的當前目錄(可以使用 -C 和 --no-chdir 參數來(lái)兼容 CGI 模式)。
出錯時(shí)輸出純文本的錯誤信息(非 HTML 格式)。
CLI SAPI 強制覆蓋了 php.ini 中的某些設置,因為這些設置在外殼環(huán)境下是沒(méi)有意義的。
設置選項 | CLI SAPI 默認值 | 備注 |
---|---|---|
html_errors | false |
無(wú)意義的 HTML
標記符會(huì )使得出錯信息很凌亂,所以在外殼下閱讀報錯信息是十分困難的。因此將該選項的默認值改為 false 。
|
implicit_flush | true |
在命令行模式下,所有來(lái)自 print 和
echo 的輸出將被立即寫(xiě)到輸出端,而不作任何地緩沖操作。如果希望延緩或控制標準輸出,仍然可以使用
output buffering 設置項。
|
max_execution_time | 0(無(wú)限值) | 鑒于在外殼環(huán)境下使用 PHP 的無(wú)窮的可能性,最大運行時(shí)間被設置為了無(wú)限值。為 web 開(kāi)發(fā)的應用程序可能只需運行幾秒鐘時(shí)間,而外殼應用程序的運行時(shí)間可能會(huì )長(cháng)的多。 |
register_argc_argv | true |
由于該設置為
在使用 CLI SAPI 時(shí),PHP 變量
|
output_buffering | false |
雖然 php.ini 設置已經(jīng)硬編碼為 |
max_input_time | false |
PHP CLI 不支持 GET、POST、文件上傳。 |
注意:
這些設置無(wú)法在設置文件 php.ini 或任何指定的其它文件中被初始化為其它值。這些默認值被限制在所有其它的設置文件被解析后改變。 不過(guò),它們的值可以在程序運行的過(guò)程中被改變 (盡管對于該運行過(guò)程來(lái)說(shuō),這些設置項是沒(méi)有意義的,例如 register_argc_argv)。
注意:
推薦命令行腳本設置 ignore_user_abort。 更多信息參見(jiàn) ignore_user_abort()。
為了減輕外殼環(huán)境下的工作,我們?yōu)?I/O 流 定義了一系列常量。
CLI SAPI 不會(huì )將當前目錄改為已運行的腳本所在的目錄。
以下范例顯示了本模塊與 CGI SAPI 模塊之間的不同:
<?php
// 名為 test.php 的簡(jiǎn)單測試程序
echo getcwd(), "\n";
?>
在使用 CGI
版本時(shí),其輸出為
$ pwd /tmp $ php-cgi -f another_directory/test.php /tmp/another_directory
明顯可以看到 PHP 將當前目錄改成了剛剛運行過(guò)的腳本所在的目錄。
使用 CLI SAPI 模式,得到:
$ pwd /tmp $ php -q another_directory/test.php /tmp
注意:
可以在命令行運行時(shí)給該 CGI SAPI 加上 -C 參數,使其支持 CLI SAPI 的功能。