首頁  >  文章  >  後端開發  >  PHP一次請求的開始與結束:MINIT與RINIT、RSHUTDOWN和MSHUTDOWN

PHP一次請求的開始與結束:MINIT與RINIT、RSHUTDOWN和MSHUTDOWN

伊谢尔伦
伊谢尔伦原創
2016-11-21 16:36:012451瀏覽

PHP開始執行以後會經過兩個主要的階段:

處理請求之前的開始階段

請求之後的結束階段

開始階段有兩個過程:

第一個過程是模組初始化階段(MINIT) , 在整個SAPI生命週期內(例如Apache啟動以後的整個生命週期內或命令列程式整個執行過程中), 過程只進行一次。

第二個過程是模組啟動階段(RINIT),該過程發生在請求階段, 例如透過url請求某個頁面,則在每次請求之前都會進行模組啟動(RINIT請求開始)。 例如PHP註冊了一些擴充模組,則在MINIT階段會回呼所有模組的MINIT函數。 模組在這個階段可以進行一些初始化工作,例如註冊常數,定義模組使用的類別等等。

模組在實作時可以透過以下巨集來實現這些回呼函數:

PHP_MINIT_FUNCTION(myphpextension)
{
    // 注册常量或者类等初始化操作
    return SUCCESS; 
}

請求到達之後PHP初始化執行腳本的基本環境,例如建立執行環境,包括保存PHP運行過程中變數名稱和值內容的符號表, 以及目前所有的函數以及類別等資訊的符號表。然後PHP會呼叫​​所有模組的RINIT函數, 在這個階段各個模組也可以執行一些相關的操作,模組的RINIT函數和MINIT回呼函數類似:

PHP_RINIT_FUNCTION(myphpextension)
{
    // 例如记录请求开始时间
    // 随后在请求结束的时候记录结束时间。这样我们就能够记录下处理请求所花费的时间了
    return SUCCESS; 
}

請求處理完後就進入了結束階段,一般腳本執行到末尾或透過呼叫exit()或die()函數, PHP都將進入結束階段。和開始階段對應,結束階段也分為兩個環節,一個在請求結束後停用模組(RSHUTDOWN,對應RINIT),一個在SAPI生命週期結束(Web伺服器退出或命令列腳本執行完畢退出)時關閉模組(MSHUTDOWN,對應MINIT)。

PHP_RSHUTDOWN_FUNCTION(myphpextension)
{
    // 例如记录请求结束时间,并把相应的信息写入到日至文件中。
    return SUCCESS; 
}


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn