PHP內(nèi)核探索 —— 一次請(qǐng)求的開(kāi)始與結(jié)束:MINIT和RINIT、RSHUTDOWN和MSHUTDOWN
PHP開(kāi)始執(zhí)行以后會(huì)經(jīng)過(guò)兩個(gè)主要的階段:
處理請(qǐng)求之前的開(kāi)始階段請(qǐng)求之后的結(jié)束階段開(kāi)始階段有兩個(gè)過(guò)程:
第一個(gè)過(guò)程是模塊初始化階段(MINIT), 在整個(gè)SAPI生命周期內(nèi)(例如Apache啟動(dòng)以后的整個(gè)生命周期內(nèi)或者命令行程序整個(gè)執(zhí)行過(guò)程中), 該過(guò)程只進(jìn)行一次。
第二個(gè)過(guò)程是模塊激活階段(RINIT),該過(guò)程發(fā)生在請(qǐng)求階段, 例如通過(guò)url請(qǐng)求某個(gè)頁(yè)面,則在每次請(qǐng)求之前都會(huì)進(jìn)行模塊激活(RINIT請(qǐng)求開(kāi)始)。 例如PHP注冊(cè)了一些擴(kuò)展模塊,則在MINIT階段會(huì)回調(diào)所有模塊的MINIT函數(shù)。 模塊在這個(gè)階段可以進(jìn)行一些初始化工作,例如注冊(cè)常量,定義模塊使用的類等等。
模塊在實(shí)現(xiàn)時(shí)可以通過(guò)如下宏來(lái)實(shí)現(xiàn)這些回調(diào)函數(shù):
PHP_MINIT_FUNCTION(myphpextension){ // 注冊(cè)常量或者類等初始化操作 return SUCCESS; }
請(qǐng)求到達(dá)之后PHP初始化執(zhí)行腳本的基本環(huán)境,例如創(chuàng)建一個(gè)執(zhí)行環(huán)境,包括保存PHP運(yùn)行過(guò)程中變量名稱和值內(nèi)容的符號(hào)表, 以及當(dāng)前所有的函數(shù)以及類等信息的符號(hào)表。然后PHP會(huì)調(diào)用所有模塊的RINIT函數(shù), 在這個(gè)階段各個(gè)模塊也可以執(zhí)行一些相關(guān)的操作,模塊的RINIT函數(shù)和MINIT回調(diào)函數(shù)類似:
PHP_RINIT_FUNCTION(myphpextension){ // 例如記錄請(qǐng)求開(kāi)始時(shí)間 // 隨后在請(qǐng)求結(jié)束的時(shí)候記錄結(jié)束時(shí)間。這樣我們就能夠記錄下處理請(qǐng)求所花費(fèi)的時(shí)間了 return SUCCESS; }
請(qǐng)求處理完后就進(jìn)入了結(jié)束階段,一般腳本執(zhí)行到末尾或者通過(guò)調(diào)用exit()或die()函數(shù), PHP都將進(jìn)入結(jié)束階段。和開(kāi)始階段對(duì)應(yīng),結(jié)束階段也分為兩個(gè)環(huán)節(jié),一個(gè)在請(qǐng)求結(jié)束后停用模塊(RSHUTDOWN,對(duì)應(yīng)RINIT), 一個(gè)在SAPI生命周期結(jié)束(Web服務(wù)器退出或者命令行腳本執(zhí)行完畢退出)時(shí)關(guān)閉模塊(MSHUTDOWN,對(duì)應(yīng)MINIT)。
PHP_RSHUTDOWN_FUNCTION(myphpextension){ // 例如記錄請(qǐng)求結(jié)束時(shí)間,并把相應(yīng)的信息寫(xiě)入到日至文件中。 return SUCCESS; }
相關(guān)文章:
1. python爬蟲(chóng)實(shí)戰(zhàn)之制作屬于自己的一個(gè)IP代理模塊2. Java程序的編碼規(guī)范(6)3. IntelliJ IDEA設(shè)置默認(rèn)瀏覽器的方法4. HTML 絕對(duì)路徑與相對(duì)路徑概念詳細(xì)5. Spring如何使用xml創(chuàng)建bean對(duì)象6. python實(shí)現(xiàn)PolynomialFeatures多項(xiàng)式的方法7. python實(shí)現(xiàn)在內(nèi)存中讀寫(xiě)str和二進(jìn)制數(shù)據(jù)代碼8. Android Studio設(shè)置顏色拾色器工具Color Picker教程9. python 利用toapi庫(kù)自動(dòng)生成api10. python實(shí)現(xiàn)讀取類別頻數(shù)數(shù)據(jù)畫(huà)水平條形圖案例
