日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
PHP中請求的生命周期有哪些

這篇文章給大家介紹PHP中請求的生命周期有哪些,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了平陰免費建站歡迎大家使用!

PHP的運行模式

1.cli:命令行模式

2.CGI(common gateway interface): 公共網(wǎng)關(guān)接口

   當(dāng)一個服務(wù)web-service(nginx)分配過來請求的時候,通過匹配后綴是動態(tài)的php的請求。CGI就會去讀取php.ini的基本配置信息,初始化環(huán)境,創(chuàng)建進(jìn)程,返回數(shù)據(jù),退出進(jìn)程。每一次請求都是循環(huán)往復(fù),所以有些繁瑣,這是后面為什么會誕生fastcgi的原因。

3. fastcgi (fast cgi): cgi的改進(jìn)版

   3.1當(dāng)web服務(wù)器啟動時載入fastcgi管理器。

   3.2.fastcgi自動初始化,創(chuàng)建fastcgi主進(jìn)程和多個cgi解析器進(jìn)程,等待來著web服務(wù)器的請求(只初始化一次,還有個好處,數(shù)據(jù)庫可以持續(xù)化連接)。

   3.3當(dāng)請求web服務(wù)器時,通過匹配后綴是動態(tài)的php請求,web服務(wù)器通過socket請求fastcgi進(jìn)程管理器,fastcgi進(jìn)程管理器,選擇一個cgi解析器,web服務(wù)器將cgi環(huán)境變量和標(biāo)準(zhǔn)輸入發(fā)送fastcgi子進(jìn)程php-cgi.

 3.4fastcgi子進(jìn)程處理完后將標(biāo)準(zhǔn)的輸出和錯誤從同一個連接返回給web服務(wù)器,當(dāng)fastcgi子進(jìn)程結(jié)束后請求就結(jié)束了,fastcgi子進(jìn)程接著等待處理來自fastcgi進(jìn)程管理器的下一個連接,在CGI模式中,php-cgi.在此便退出了。

4. mod_php:

即Apache運行PHP的默認(rèn)方式,將PHP作為web服務(wù)器的子進(jìn)程控制,mod_php模式運行PHP,意味著PHP是作為Apache的一個模塊來啟動的,因此只有在Apache啟動的時候會讀取php.ini配置文件并加載擴(kuò)展模塊,在Apache運行期間是不會再去讀取和加載擴(kuò)展模塊的

PHP現(xiàn)在流行的兩種運行模式是FPM模式、CLI模式。

PHP腳本執(zhí)行的開始,都是通過SAPI接口進(jìn)行的


第一階段:SAPI接口,模塊初始化階段

SAPI是什么?

Server Application Programming Interface 服務(wù)端應(yīng)用編程接口

這是 PHP 內(nèi)核提供給外部調(diào)用其服務(wù)的接口,即外部系統(tǒng)可以通過 SAPI 來調(diào)用 PHP 提供的編譯腳本、執(zhí)行腳本的服務(wù)。

SAPI提供給了外部應(yīng)用跟php通信的管道,這個外部應(yīng)用包括不限于Apache,httpd,liunx終端等

PHP 中實現(xiàn)的 SAPI 有很多,CLI、FPM 是我們比較常見的。

PHP中請求的生命周期有哪些

在使用Apache作為Web服務(wù)器的時候:

PHP總是作為Apache的模塊,隨著Apache的啟動而運行的。

當(dāng)給定的SAPI啟動時,PHP進(jìn)入初始化內(nèi)核子系統(tǒng),主要對PHP框架,zend引擎的初始化操作,這個階段一般是在SAPI啟動時執(zhí)行一次。

在使用Nginx作為Web服務(wù)器的時候:

因為Nginx不能直接和PHP通信,所以他們之間要通過 fast-cgi 協(xié)議才能互相理解。

php-fpm 即 php-Fastcgi Process Manager,是 FastCGI 的實現(xiàn),并提供了進(jìn)程管理的功能。

對于php-fpm而言,就是在master進(jìn)程啟動時執(zhí)行,加載PHP拓展,并調(diào)用模塊初始化例程 MINIT , 這使得每個擴(kuò)展可以初始化內(nèi)部變量、分配資源、注冊資源處理器,以及向zend注冊自己的函數(shù),以便于腳本調(diào)用這其中的函數(shù)時候zend知道執(zhí)行哪些代碼。再預(yù)先fork 多個 worker 進(jìn)程,accept請求并執(zhí)行。

worder 進(jìn)程的生命周期如下圖:

PHP中請求的生命周期有哪些

第二階段:請求初始化階段

當(dāng)一個請求發(fā)生時,在處理請求前需要經(jīng)歷的一個階段 :

  1. Nginx 解析一個請求

  2. 當(dāng)符合php腳本請求的規(guī)則的時候,會把這個請求交給反向代理中的fast-cgi模塊

  3. Nginx 的 fast-cgi 模塊會遵循 fast-cgi協(xié)議 將這個請求轉(zhuǎn)發(fā)給 proxy_pass 指定的上游服務(wù):php-fpm

  4. SAPI層將控制權(quán)交給PHP層。于是PHP設(shè)置了用于回復(fù)本次請求所需的環(huán)境變量。同時,它還建立一個變量表,用來存放執(zhí)行過程 中產(chǎn)生的變量名和值。PHP調(diào)用各個模塊的RINIT方法,即“請求初始化”。一個經(jīng)典的例子是Session模塊的RINIT,如果在php.ini中 啟用了Session模塊,那在調(diào)用該模塊的RINIT時就會初始化$_SESSION變量,并將相關(guān)內(nèi)容讀入;RINIT方法可以看作是一個準(zhǔn)備過程, 在程序執(zhí)行之間就會自動啟動。


第三階段:php腳本執(zhí)行階段

php代碼解析執(zhí)行的過程,Zend引擎接管控制權(quán)。

  1. Scanning(Lexing) ,將PHP代碼轉(zhuǎn)換為語言片段(Tokens) (掃描–語言片段)

  2. Parsing, 將Tokens轉(zhuǎn)換成簡單而有意義的表達(dá)式(解析–表達(dá)式)

  3. Compilation, 將表達(dá)式編譯成Opocdes(編碼-opcodes)

  4. Execution, 順次執(zhí)行Opcodes,每次一條,從而實現(xiàn)PHP腳本的功能。(執(zhí)行opcodes)


第四階段:請求結(jié)束階段

請求處理完成后,就進(jìn)入了 結(jié)束階段。

  1. 執(zhí)行flush,輸出響應(yīng)內(nèi)容

  2. PHP啟動清理程序,它會按順序調(diào)用各個模塊的RSHUTDOWN方法。 RSHUTDOWN用以清除程序運行時產(chǎn)生的符號表,執(zhí)行垃圾清理過程,也就是對每個變量調(diào)用unset函數(shù)。

  3. worker進(jìn)程關(guān)閉該請求連接,繼續(xù)等待 accept下一個請求。

關(guān)于PHP中請求的生命周期有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


文章題目:PHP中請求的生命周期有哪些
網(wǎng)站路徑:http://www.dlmjj.cn/article/jepggj.html