PHP8 和其它 SAPI 模塊的區(qū)別

2023-08-24 15:01 更新

以下為 CLI SAPI 和其它 SAPI 模塊相比的顯著區(qū)別:

  • 與 CGI SAPI 不同,其輸出沒有任何頭信息。盡管 CGI SAPI 提供了取消 HTTP 頭信息的方法,但在 CLI SAPI 中并不存在類似的方法以開啟 HTTP 頭信息的輸出。CLI 默認以安靜模式開始,但為了保證兼容性,-q 和 --no-header 參數(shù)為了向后兼容仍然保留,使得可以使用舊的 CGI 腳本。在運行時,不會把工作目錄改為腳本的當前目錄(可以使用 -C 和 --no-chdir 參數(shù)來兼容 CGI 模式)。出錯時輸出純文本的錯誤信息(非 HTML 格式)。
  • CLI SAPI 強制覆蓋了 php.ini 中的某些設置,因為這些設置在外殼環(huán)境下是沒有意義的。
覆蓋 php.ini 設置選項
設置選項 CLI SAPI 默認值 備注
html_errors false 無意義的 HTML 標記符會使得出錯信息很凌亂,所以在外殼下閱讀報錯信息是十分困難的。因此將該選項的默認值改為 false
implicit_flush true 在命令行模式下,所有來自 print 和 echo 的輸出將被立即寫到輸出端,而不作任何地緩沖操作。如果希望延緩或控制標準輸出,仍然可以使用 output buffering 設置項。
max_execution_time 0(無限值) 鑒于在外殼環(huán)境下使用 PHP 的無窮的可能性,最大運行時間被設置為了無限值。為 web 開發(fā)的應用程序可能只需運行幾秒鐘時間,而外殼應用程序的運行時間可能會長的多。
register_argc_argv true

由于該設置為 true,將總是可以在 CLI SAPI 中訪問到 argc(傳送給應用程序參數(shù)的個數(shù))和 argv(包含有實際參數(shù)的數(shù)組)。

在使用 CLI SAPI 時,PHP 變量 $argc 和 $argv 已被注冊并且設定了對應的值。隨時可以通過 $_SERVER 數(shù)組 來訪問它們,例如:$_SERVER['argv']

output_buffering false

雖然 php.ini 設置已經(jīng)硬編碼為 false, 輸出緩沖控制函數(shù)仍然有效。

max_input_time false

PHP CLI 不支持 GET、POST、文件上傳。

注意:這些設置無法在設置文件 php.ini 或任何指定的其它文件中被初始化為其它值。這些默認值被限制在所有其它的設置文件被解析后改變。 不過,它們的值可以在程序運行的過程中被改變 (盡管對于該運行過程來說,這些設置項是沒有意義的,例如 register_argc_argv)。

注意:推薦命令行腳本設置 ignore_user_abort。 更多信息參見 ignore_user_abort()。

  • 為了減輕外殼環(huán)境下的工作,我們?yōu)?nbsp;I/O 流 定義了一系列常量。
  • CLI SAPI 不會將當前目錄改為已運行的腳本所在的目錄。以下范例顯示了本模塊與 CGI SAPI 模塊之間的不同:
<?php
// 名為 test.php 的簡單測試程序
echo getcwd(), "\n";
?>

在使用 CGI 版本時,其輸出為

$ pwd
/tmp

$ php-cgi -f another_directory/test.php
/tmp/another_directory

明顯可以看到 PHP 將當前目錄改成了剛剛運行過的腳本所在的目錄。

使用 CLI SAPI 模式,得到:

$ pwd
/tmp

$ php -q another_directory/test.php
/tmp

這使得在利用 PHP 編寫外殼工具時獲得了很大的便利。

注意:可以在命令行運行時給該 CGI SAPI 加上 -C 參數(shù),使其支持 CLI SAPI 的功能。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號