摘要:當(dāng)客戶端請(qǐng)求到達(dá)時(shí),進(jìn)程管理器選擇并連接到一個(gè)解釋器。子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息從同一連接返回。子進(jìn)程接著等待并處理來自進(jìn)程管理器運(yùn)行在中的下一個(gè)連接。
目前常見的4種PHP運(yùn)行模式
CGI通用網(wǎng)關(guān)接口模式
FAST-CGI模式
CLI命令行模式
模塊模式
運(yùn)行模式 CGI通用網(wǎng)關(guān)接口模式每有一個(gè)用戶請(qǐng)求,都會(huì)先要?jiǎng)?chuàng)建cgi的子進(jìn)程,然后處理請(qǐng)求,處理完后結(jié)束這個(gè)子進(jìn)程
cgi是一種為了保證web server傳遞過來的數(shù)據(jù)是標(biāo)準(zhǔn)格式的通用網(wǎng)關(guān)接口協(xié)議
比較老,比較原始,大多已經(jīng)不用了
FAST-CGI模式是cgi的升級(jí)版本,F(xiàn)astCGI 像是一個(gè)常駐 (long-live) 型的 CGI,它可以一直執(zhí)行著,只要激活后,不會(huì)每次都要花費(fèi)時(shí)間去fork 一次,也是一種協(xié)議
FastCGI的工作原理是:
(1)、Web Server啟動(dòng)時(shí)載入FastCGI進(jìn)程管理器【PHP的FastCGI進(jìn)程管理器是PHP-FPM(php-FastCGI Process Manager)】(IIS ISAPI或Apache Module);
(2)、FastCGI進(jìn)程管理器自身初始化,啟動(dòng)多個(gè)CGI解釋器進(jìn)程 (在任務(wù)管理器中可見多個(gè)php-cgi.exe)并等待來自Web Server的連接。
(3)、當(dāng)客戶端請(qǐng)求到達(dá)Web Server時(shí),F(xiàn)astCGI進(jìn)程管理器選擇并連接到一個(gè)CGI解釋器。Web server將CGI環(huán)境變量和標(biāo)準(zhǔn)輸入發(fā)送到FastCGI子進(jìn)程php-cgi。
(4)、FastCGI子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息從同一連接返回Web Server。當(dāng)FastCGI子進(jìn)程關(guān)閉連接時(shí),請(qǐng)求便告處理完成。FastCGI子進(jìn)程接著等待并處理來自FastCGI進(jìn)程管理器(運(yùn)行在 WebServer中)的下一個(gè)連接。在正常的CGI模式中,php-cgi.exe在此便退出了。
在CGI模式中,可以想象 CGI通常有多慢。每一個(gè)Web請(qǐng)求PHP都必須重新解析php.ini、重新載入全部dll擴(kuò)展并重初始化全部數(shù)據(jù)結(jié)構(gòu)。使用FastCGI,所有這些都只在進(jìn)程啟動(dòng)時(shí)發(fā)生一次。一個(gè)額外的好處是,持續(xù)數(shù)據(jù)庫(kù)連接(Persistent database connection)可以工作。
CLI命令行模式一般使用調(diào)用腳本、查看php信息時(shí)會(huì)使用到該模式
php -r"phpinfo();" |less 分頁(yè)顯示
模塊模式Apache + mod_php
lighttp + spawn-fcgi
nginx + PHP-FPM
運(yùn)行原理PHP-CGI:fast-cgi是一種協(xié)議,而php-cgi是實(shí)現(xiàn)了這種協(xié)議的進(jìn)程。不過這種實(shí)現(xiàn)比較爛。它是單進(jìn)程的,一個(gè)進(jìn)程處理一個(gè)請(qǐng)求,處理結(jié)束后進(jìn)程就銷毀
PHP - FPM:是對(duì)php-cgi的改進(jìn)版,它直接管理多個(gè)php-cgi進(jìn)程/線程。也就是說,php-fpm是php-cgi的進(jìn)程管理器因此它也算是fastcgi協(xié)議的實(shí)現(xiàn)
php的運(yùn)行原理,就是在服務(wù)器啟動(dòng)時(shí),自動(dòng)載入PHP-FPM進(jìn)程管理器,從而管理多個(gè)PHP-CGI進(jìn)程來準(zhǔn)備響應(yīng)用戶的請(qǐng)求,如下圖所示:
由于php-cgi是隨服務(wù)器啟動(dòng)載入的,所以初始化變量只會(huì)發(fā)生一次
運(yùn)行模式和運(yùn)行原理的區(qū)別多個(gè)運(yùn)行模式相當(dāng)于超市的不同入口,運(yùn)行原理就是進(jìn)入超市后的固定的行走路線,通過不同的運(yùn)行模式進(jìn)入到底層(進(jìn)入超市)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/30782.html
摘要:的工作原理和生命周期是一門適用于開發(fā)的動(dòng)態(tài)語言,它可以說是一個(gè)用語言實(shí)現(xiàn)的包含大量組件的軟件框架。無論是哪種公眾模式,的工作原理都是一樣的,都是作為一種運(yùn)行。 PHP的工作原理和生命周期 php是一門適用于web開發(fā)的動(dòng)態(tài)語言,它可以說是一個(gè)用C語言實(shí)現(xiàn)的包含大量組件的軟件框架。那么,php是如何工作的呢?它的生命周期是怎么樣的呢? 表層分析 php是以請(qǐng)求/響應(yīng)為周期運(yùn)行服務(wù)端應(yīng)用...
摘要:模塊加載原理的模塊可以以靜態(tài)方式編譯到可執(zhí)行程序中,也可以在運(yùn)行過程中動(dòng)態(tài)加載以動(dòng)態(tài)鏈接庫(kù)的方式。這樣在進(jìn)程運(yùn)行時(shí)一有請(qǐng)求,就可以加載動(dòng)態(tài)鏈接庫(kù)文件形式的模塊,用來處理請(qǐng)求。 1、PHP與Apache工作模式 在傳統(tǒng)的LAMP架構(gòu)中,PHP與Apache交互時(shí),至少有兩種方式『運(yùn)行PHP』: 使用CGI:Apache發(fā)送請(qǐng)求至php-cgi進(jìn)程,php-cgi進(jìn)程調(diào)用PHP解釋器,然...
摘要:模塊加載原理的模塊可以以靜態(tài)方式編譯到可執(zhí)行程序中,也可以在運(yùn)行過程中動(dòng)態(tài)加載以動(dòng)態(tài)鏈接庫(kù)的方式。這樣在進(jìn)程運(yùn)行時(shí)一有請(qǐng)求,就可以加載動(dòng)態(tài)鏈接庫(kù)文件形式的模塊,用來處理請(qǐng)求。 1、PHP與Apache工作模式 在傳統(tǒng)的LAMP架構(gòu)中,PHP與Apache交互時(shí),至少有兩種方式『運(yùn)行PHP』: 使用CGI:Apache發(fā)送請(qǐng)求至php-cgi進(jìn)程,php-cgi進(jìn)程調(diào)用PHP解釋器,然...
摘要:弱類型語言一個(gè)變量的類型并不是一開始就確定不變的,運(yùn)行中才會(huì)確定并可能發(fā)生隱式或顯示的類型轉(zhuǎn)換。引擎組件的模式降低內(nèi)部耦合。 一、PHP設(shè)計(jì)理念及特點(diǎn) 多進(jìn)程模型:由于PHP是多進(jìn)程模型,不同請(qǐng)求間互不干涉,這樣保證了一個(gè)請(qǐng)求掛掉不會(huì)對(duì)全盤服務(wù)造成影響,PHP也早支持多線程模型。弱類型語言:一個(gè)變量的類型并不是一開始就確定不變的,運(yùn)行中才會(huì)確定并可能發(fā)生隱式或顯示的類型轉(zhuǎn)換。引擎(Ze...
摘要:接下來會(huì)對(duì)其中五個(gè)比較常見的運(yùn)行模式進(jìn)行說明。模式是目前主流的服務(wù)運(yùn)行模式,擁有高效可靠的性能,推薦大家使用。由于微軟的排他性,只能運(yùn)行于環(huán)境。 SAPI 這里所說的 PHP 運(yùn)行模式, 其實(shí)指的是 SAPI (Server Application Programming Interface,服務(wù)端應(yīng)用編程端口 )。SAPI 為 PHP 提供了一個(gè)和外部通信的接口, PHP 就是通過這...
閱讀 3019·2021-11-24 10:21
閱讀 1588·2021-10-11 10:57
閱讀 2804·2021-09-22 15:24
閱讀 2659·2021-09-22 14:58
閱讀 2331·2019-08-30 13:16
閱讀 3478·2019-08-29 13:05
閱讀 3411·2019-08-29 12:14
閱讀 3441·2019-08-27 10:55