今天我們來聊聊PHP在Web服務(wù)器中的實現(xiàn)方式,主要包括PHP CGI、PHP ISAPI和PHP FastCGI等幾種方式。其中,PHP CGI是最常用的一種方式,因為其可移植性強,可以在各種Web服務(wù)器上面運行。
可以簡單理解PHP CGI是一種通用的CGI處理器,它可以調(diào)用解釋器去解釋PHP腳本,并返回結(jié)果。在一個典型的PHP CGI服務(wù)器中,Web服務(wù)器接收到一個HTTP請求后,會將請求交給PHP解釋器處理,解釋器處理完后返回一個HTTP響應(yīng),再由Web服務(wù)器將它送到客戶端。PHP CGI通常會使用以下命令來運行:
/c/path/to/php-cgi /path/to/script.php
其中,/c/path/to/php-cgi代表PHP解釋器程序,而/path/to/script.php代表即將執(zhí)行的PHP腳本。下面,我們將詳細介紹PHP CGI的工作原理:
首先,Web服務(wù)器會通過環(huán)境變量向PHP CGI提供請求的信息,例如HTTP請求頭、請求方法等。PHP CGI會解釋這些信息,然后讀取標(biāo)準(zhǔn)輸入,通常是一個POST請求的數(shù)據(jù)。同時,PHP解釋器也可以通過環(huán)境變量發(fā)送響應(yīng)頭信息,例如Content-Type,Content-Length等。解釋器解釋完P(guān)HP腳本后,會將結(jié)果輸出到標(biāo)準(zhǔn)輸出。一旦PHP CGI處理完客戶端請求,它會發(fā)送正常HTTP響應(yīng),然后退出。下面是PHP CGI的一些特點:
- PHP CGI運行速度較慢,因為它需要進行重復(fù)的解釋。
- PHP CGI需要為每一個HTTP請求都啟動一個新的進程,這會比較消耗系統(tǒng)資源。
- PHP CGI比較安全,因為它不通常不會直接將內(nèi)容添加到網(wǎng)頁上。
除了PHP CGI之外,還有一種更加高效的方式,叫做PHP ISAPI。與PHP CGI不同,PHP ISAPI是一種基于Windows的方式,只能在Windows操作系統(tǒng)上面運行,并且只與Microsoft Internet Server (IIS)配合使用。下面我們來看一下PHP ISAPI的工作原理:
先來說一下ISAPI的概念。ISAPI(Internet Server Application Programming Interface)是一種接口程序,可以讓W(xué)eb服務(wù)器和擴展程序交流。通常在Windows IIS服務(wù)器上使用。而PHP-ISAPI則是一個外部附接的ISAPI擴展程序,可以處理PHP腳本并返回結(jié)果。
在PHP-ISAPI的工作中,對于每一個請求,IIS都只需開啟一個工作線程來處理。因此,PHP-ISAPI的性能比PHP-CGI要好很多。但這帶來一個弊端:由于線程共享內(nèi)存,PHP腳本可能會相互影響,以及破壞進程的穩(wěn)定性。同樣,對于每一個ISAPI擴展程序,IIS都會將其加載到其自己的進程空間內(nèi),從而使每個擴展都可以調(diào)用IIS的API。PHP-ISAPI也不是沒有劣勢:
- 只能使用IIS Web服務(wù)器。
- 每個Web站點只能有一個PHP版本。
最后,還有一種方式叫做PHP FastCGI。FastCGI的概念與CGI類似,不同的是它改進了CGI不足的性能問題,可以實現(xiàn)進程復(fù)用,復(fù)用后臺進程等待處理新的請求,消除了啟動和關(guān)閉進程所帶來的性能負擔(dān),更加適合PHP穿越Web服務(wù)器運行的模式。相比PHP CGI,PHP FastCGI有以下優(yōu)勢:
- 比PHP-CGI性能更好。
- 啟動速度快。
- 支持后臺進程。
盡管PHP FastCGI比PHP-CGI更快、更可靠,但也有一些缺點。例如,它需要更多的內(nèi)存才能處理更多的并發(fā)請求;它不支持運行時動態(tài)加載擴展。
總的來說,PHP CGI、PHP ISAPI和PHP FastCGI都有各自的優(yōu)缺點。如果是一個小型的Web應(yīng)用程序,使用PHP CGI是完全可以的,如果要處理大量的并發(fā)請求,那么PHP FastCGI是一個不錯的選擇。當(dāng)然,PHP ISAPI僅適用于使用Microsoft IIS的Windows服務(wù)器。選擇哪種方式需要根據(jù)具體的業(yè)務(wù)需求和應(yīng)用場景來確定。