本文將為大家詳細介紹“PHP運行模式是什么”,內容步驟清晰詳細,細節處理妥當,而小編每天都會更新不同的知識點,希望這篇“PHP運行模式是什么”能夠給你意想不到的收獲,請大家跟著小編的思路慢慢深入,具體內容如下,一起去收獲新知識吧。
php是一個嵌套的縮寫名稱,指的是英文超級文本預處理語言(php:Hypertext Preprocessor)的縮寫,它的語法混合了C、Java、Perl以及php自創新的語法,主要用來做網站開發,許多小型網站都用php開發,因為php是開源的,從而使得php經久不衰。
PHP有五種運行模式,常見的有4種:
1.CGI(通用網關接口/ Common Gateway Interface)
2.FastCGI(常駐型CGI / Long-Live CGI)
3.CLI(命令行運行 / Command Line Interface)
4.LoadModule【Apache獨有】
5.ISAPI(Internet Server Application Program Interface)【IIS獨有】
備注:在PHP5.3以后,PHP不再有ISAPI模式,安裝后也不再有php5isapi.dll這個文件。要在IIS6上使用高版本PHP,必須安裝FastCGI 擴展,然后使IIS6支持FastCGI。
查看當前運行模式
echo php_sapi_name();
CGI模式
介紹:
CGI即通用網關接口(Common Gateway Interface),它是一段程序,通俗的講CGI就象是一座橋,把網頁和Web服務器中的執行程序連接起來,它把HTML接收的指令傳遞給服務器的執行程序,再把服務器執行程序的結果返還給HTML頁。CGI 的跨平臺性能極佳,幾乎可以在任何操作系統上實現。
調用過程:Fork-And-Execute模式
用戶請求 —> web服務器接收請求【常用Nginx、apache】—> fork CGI的子進程&處理請求 —-> 請求處理完畢,返回結果到web服務器&銷毀子進程 —> web服務器返回結果給用戶
圖解:
優勢:
作為PHP最早的運行模式,每次請求都獨立處理,調用過程足夠簡單清晰,可控性強
進程間是隔離的,保證數據不會被污染
劣勢:
每次請求都需要fork一個新的CGI子進程,假如同一時間并發請求一千,意味著就要fork一千個子進程,這就會導致幾個問題:
fork子進程需要時間,需要占用內存【copy-on-write】
子進程過多,會導致CPU將大量的時間花費在上下文切換上
每次請求需要重新加載相關資源
FastCGI模式
介紹:
FastCGI是CGI的升級版本,FastCGI像是一個常駐 (long-live)型的 CGI,在啟動web服務器的時候載入FastCGI進程管理器【PHP-FPM、IIS ISAPI、Apache Module】,當有請求過來的時候,web服務器只需要交給FastCGI進程管理器處理即可。
調用過程:以 PHP-FPM 為例
web服務器啟動的時候 啟動 PHP-FPM master進程(主要負責分配請求給空閑的自子進程處理)以及一定數量的fast-cgi子進程(負責處理請求)。 PHP-FPM master進程管理一個進程池,池里有若干個fast-cgi子進程,每個fast-cgi子進程單獨處理一個請求,互不干涉。
用戶請求 —> web服務器接收請求【常用Nginx、apache】—> 檢測到是PHP請求&轉發給FPM master進程 —> FPM master進程 指定空閑fast-cgi子進程處理請求 —> 子進程載入文件(如php.ini)及其他資源處理請求 —> 處理結束&清除資源,結果返回master & 子進程掛起,標記為空閑—> master 將結果返回web服務器 —> web服務器返回結果給用戶
圖解:
優勢:
從穩定性上看,FastCGI是以獨立的進程池來運行CGI,單獨一個進程死掉,系統可以很輕易的丟棄,然后重新分配新的進程來運行邏輯
從安全性上看,FastCGI和宿主的web Server完全獨立,FastCGI 不會影響web 服務器的運行【如果PHP-FPM處于關閉狀態,則會返回502 bad gateway 給用戶】
從性能上看,FastCGI把動態邏輯的處理從 web Server中分離出來,大負荷的IO處理還是留給宿主Server,這樣宿主Server可以一心一意作IO【對于一個普通的動態網頁來說, 邏輯處理可能只有一小部分,更多的是圖片等靜態資源的加載】
劣勢:
一個fast-cgi子進程同一時間只能處理一個請求,所以網站的并發性能就受限于子進程數量
如果開啟的進程過多,會導致CPU將大量的時間浪費在進程的上下文切換上。
每次請求fast-cgi子進程都需要重新加載相關資源,請求結束需要釋放資源
CLI(命令行運行 / Command Line Interface)
簡介:
php-cli模式屬于命令行模式,對于很多剛開始學php就開始wamp,wnmp的開發者來說是最陌生的一種運行模式
該模式不需要借助其他程序,直接輸入php xx.php 就能執行php代碼
命令行模式和常規web模式明顯不一樣的是:
沒有超時時間
默認關閉buffer緩沖
STDIN和STDOUT標準輸入/輸出/錯誤 的使用
echo var_dump,phpinfo等輸出直接輸出到控制臺
可使用的類/函數 不同
php.ini配置的不同
PS:詳見官方文檔:www.php.net/manual/zh/features.com...
LoadModule(Apache獨有)
“D:/…/php71/php7apache2_4.dll”起到的作用就是這個
調用過程:
用戶請求 —> Apache 服務器 —> 調用mod_php5模塊處理請求 —> 返回請求結果給Apache —> Apache 返回結果給用戶
圖解:
ISAPI(Internet Server Application Program Interface)
簡介:
在PHP5.3以后,PHP不再有ISAPI模式,安裝后也不再有php5isapi.dll這個文件。要在IIS6上使用高版本PHP,必須安裝FastCGI 擴展,然后使IIS6支持FastCGI。故此處不做過多介紹
圖解:
寫在最后:
在互聯網爆炸式發展的今天,絕大多數網站都需要考慮網站的高并發性能。Nginx由于其輕量和出色的并發性能等優點,越來越多的受到開發者的青睞。曾經火爆全網的 LAMP 組合已不是PHP開發者的第一選擇,異軍突起的 LNMP 組合已然成為 PHPer 的必修課,這導致基于 Apache 的LoadModule模式已越來越少被提及。
除此以外,用來寫命令行腳本CLI模式和幾乎絕跡的 ISAPI 模式顯然不適合建設網站。
作為 CGI 加強版的 Fast-CGI 模式在繼承了 CGI 簡單、安全的基礎上,使用PHP-FPM管理子進程,使得web服務器更加專注的處理I/O,PHP-FPM管理維護一個進程池,可提前 fork 一定數量的子進程等待處理請求,既不用在請求到來時才fork子進程,也不用在請求結束時就銷毀子進程。
如果你能讀到這里,小編希望你對“PHP運行模式是什么”這一關鍵問題有了從實踐層面最深刻的體會,具體使用情況還需要大家自己動手實踐使用過才能領會,如果想閱讀更多相關內容的文章,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。