PHP CGI,或者叫做 CGI Mode,是 PHP 腳本運行的一種模式,它是通過 web 服務器來運行的一個外部的進程。在這種模式下,每次執行 PHP 腳本都需要重新創建進程,所以相比于其他模式,它的效率可能會稍低。
但是,PHP CGI 也有其獨特的優點。比如說,在一些不能直接支持 PHP 解析的 Web 服務器上(比如 Microsoft IIS),我們可以采用將 PHP 放在 CGI 模式下來解決,因為這個時候 PHP 是一個獨立的進程,我們可以從服務器中獲取到它的返回結果。
相比于模塊模式,CGI 模式一個更好的特點是:在一些共享主機上,因為 PHP 的模塊沒有被安裝,我們只能去限制建立 Web 應用程序。3
然后,我們來看一下 PHP 使用 CGI 模式時,具體的處理方式和運行流程:
1. 收到 HTTP 請求。 2. 檢查請求的文件是否是 PHP 文件以及對應的文件地址。 3. 如果是 PHP 文件,則啟動 PHP 的 CGI 進程。 4. 將 HTTP POST 或 GET 數據傳入到 CGI 進程中, 同時設置一些額外的環境變量來傳遞更多信息。 5. CGI 進程開始執行 PHP 腳本。 6. 執行完成后,將執行結果返回給 Web 服務器。 7. Web 服務器將結果返回給客戶端瀏覽器。
CGI 模式下,為了處理 CGI 程序的輸入和輸出,在 Apache 的主配置文件(httpd.conf)中要設置ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
之類的語句,這意味著 Web 服務器需要將所有以 /cgi-bin/ 開頭的請求都映射到你的 cgi-bin 目錄下面。例如,我們可以將一個 CGI 腳本命名為 test.cgi,然后將它存儲在 /var/www/cgi-bin/ 下。
另外,為了在 CGI 腳本中方便地獲取調用參數,PHP 定義了一些預定義的全局變量。比如,我們可以使用$_GET
和$_POST
來獲取提交的數據。以這樣的方式來編寫腳本會使得你的代碼更通用。
總的來說,CGI 模式是一種不錯的運行方式,特別適用于一些不支持 PHP 模塊的服務器環境。CGI 模式下的 PHP 進程是獨立的,并且可控性非常高,因為在運行過程中,我們可以隨時檢查、殺死它。雖然相比于其他運行模式,它的效率會稍低,但是如果我們需要在特定的環境下運行 PHP,就需要了解并嘗試使用 CGI 模式。