PHP內核探索 —— 一次請求的開始與結束:MINIT和RINIT、RSHUTDOWN和MSHUTDOWN
PHP開始執(zhí)行以后會經過兩個主要的階段:
處理請求之前的開始階段請求之后的結束階段開始階段有兩個過程:
第一個過程是模塊初始化階段(MINIT), 在整個SAPI生命周期內(例如Apache啟動以后的整個生命周期內或者命令行程序整個執(zhí)行過程中), 該過程只進行一次。
第二個過程是模塊激活階段(RINIT),該過程發(fā)生在請求階段, 例如通過url請求某個頁面,則在每次請求之前都會進行模塊激活(RINIT請求開始)。 例如PHP注冊了一些擴展模塊,則在MINIT階段會回調所有模塊的MINIT函數。 模塊在這個階段可以進行一些初始化工作,例如注冊常量,定義模塊使用的類等等。
模塊在實現時可以通過如下宏來實現這些回調函數:
PHP_MINIT_FUNCTION(myphpextension){ // 注冊常量或者類等初始化操作 return SUCCESS; }
請求到達之后PHP初始化執(zhí)行腳本的基本環(huán)境,例如創(chuàng)建一個執(zhí)行環(huán)境,包括保存PHP運行過程中變量名稱和值內容的符號表, 以及當前所有的函數以及類等信息的符號表。然后PHP會調用所有模塊的RINIT函數, 在這個階段各個模塊也可以執(zhí)行一些相關的操作,模塊的RINIT函數和MINIT回調函數類似:
PHP_RINIT_FUNCTION(myphpextension){ // 例如記錄請求開始時間 // 隨后在請求結束的時候記錄結束時間。這樣我們就能夠記錄下處理請求所花費的時間了 return SUCCESS; }
請求處理完后就進入了結束階段,一般腳本執(zhí)行到末尾或者通過調用exit()或die()函數, PHP都將進入結束階段。和開始階段對應,結束階段也分為兩個環(huán)節(jié),一個在請求結束后停用模塊(RSHUTDOWN,對應RINIT), 一個在SAPI生命周期結束(Web服務器退出或者命令行腳本執(zhí)行完畢退出)時關閉模塊(MSHUTDOWN,對應MINIT)。
PHP_RSHUTDOWN_FUNCTION(myphpextension){ // 例如記錄請求結束時間,并把相應的信息寫入到日至文件中。 return SUCCESS; }
相關文章:
1. python 如何在 Matplotlib 中繪制垂直線2. bootstrap select2 動態(tài)從后臺Ajax動態(tài)獲取數據的代碼3. ASP常用日期格式化函數 FormatDate()4. python中@contextmanager實例用法5. html中的form不提交(排除)某些input 原創(chuàng)6. CSS3中Transition屬性詳解以及示例分享7. js select支持手動輸入功能實現代碼8. 如何通過python實現IOU計算代碼實例9. 開發(fā)效率翻倍的Web API使用技巧10. vue使用moment如何將時間戳轉為標準日期時間格式
