1.CGI模式 CGI即通用網關接口(Common Gateway Interface),它是一段程序,通俗的講CGI就象是一座橋,把網頁和Web服務器中的執行程序連接起來,它把HTML接收的指令傳遞給服務器的執行程序,再把服務器執行程序的結果返還給HTML頁。CGI 的跨平臺性能極佳,幾乎可以在任何操作系統上實現。 CGI已經是比較老的模式了,這幾年都很少用了。
每有一個用戶請求,都會先要創建CGI的子進程,然后處理請求,處理完后結束這個子進程,這就是Fork-And-Execute模式。 當用戶請求數量非常多時,會大量擠占系統的資源如內存,CPU時間等,造成效能低下。所以用CGI方式的服務器有多少連接請求就會有多少CGI子進程,子進程反復加載是CGI性能低下的主要原因。
如果不想把 php 嵌入到服務器端軟件(如 Apache)作為一個模塊安裝的話,可以選擇以 CGI 的模式安裝?;蛘甙?PHP 用于不同的 CGI 封裝以便為代碼創建安全的 chroot 和 setuid 環境。這樣每個客戶機請求一個PHP文件,Web服務器就調用php.exe(win下是php.exe,linux是php)去解釋這個文件,然后再把解釋的結果以網頁的形式返回給客戶機。 這種安裝方式通常會把 PHP 的可執行文件安裝到 web 服務器的 cgi-bin 目錄。CERT 建議書 CA-96.11 建議不要把任何的解釋器放到 cgi-bin 目錄。
這種方式的好處是把Web Server和具體的程序處理獨立開來,結構清晰,可控性強,同時缺點就是如果在高訪問需求的情況下,CGI的進程Fork就會成為很大的服務器負擔,想 象一下數百個并發請求導致服務器Fork出數百個進程就明白了。這也是為什么CGI一直背負性能低下,高資源消耗的惡名的原因 2.FastCGI FastCGI是CGI的升級版本,FastCGI像是一個常駐 (long-live)型的 CGI,它可以一直執行著,只要激活后,不會每次都要花費時間去 Fork 一次 (這是 CGI 最為人詬病的 fork-and-execute 模式)。
FastCGI是一個可伸縮地、高速地在HTTP server和動態腳本語言間通信的接口。多數流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同時,FastCGI也被許多腳本語言所支持,其中就有PHP。
FastCGI接口方式采用C/S結構,可以將HTTP服務器和腳本解析服務器分開,同時在腳本解析服務器上啟動一個或者多個腳本解析守護進程。當HTTP服務器每次遇到動態程序時,可以將其直接交付給FastCGI進程來執行,然后將得到的結果返回給瀏覽器。這種方式可以讓HTTP服務器專一地處理靜態請求或者將動態腳本服務器的結果返回給客戶端,這在很大程度上提高了整個應用系統的性能 備注:PHP的FastCGI進程管理器是PHP-FPM 3.apache2-mod PHP作為Apache模塊,Apache服務器在系統啟動后,預先生成多個進程副本駐留在內存中,一旦有請求出 現,就立即使用這些空余的子進程進行處理,這樣就不存在生成子進程造成的延遲了。這些服務器副本在處理完一次HTTP請求之后并不立即退出,而是停留在計算機中等待下次請求。對于客戶瀏覽器的請求反應更快,性能較高。 4.CLI PHP-CLI是PHP Command Line Interface的簡稱,如同它名字的意思,就是PHP在命令行運行的接口,區別于在Web服務器上運行的PHP環境(PHP-CGI,ISAPI等)。 也就是說,PHP不單可以寫前臺網頁,它還可以用來寫后臺的程序。 PHP的CLI Shell腳本適用于所有的PHP優勢,使創建要么支持腳本或系統甚至與GUI應用程序的服務端,在Windows和Linux下都是支持PHP-CLI模式的。
新聞熱點
疑難解答
圖片精選