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