PHP核心探索:一次請求的開始與結束

來源:互聯網
上載者:User

標籤:io   使用   檔案   on   cti   工作   時間   伺服器   as   

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都將進入結束階段。和開始階段對應,結束階段也分為兩個環節,一個在請求結束後停用模組(RSHUWDOWN,對應RINIT), 一個在SAPI生命週期結束(Web伺服器退出或者命令列指令碼執行完畢退出)時關閉模組(MSHUTDOWN,對應MINIT)。

PHP_RSHUTDOWN_FUNCTION(myphpextension){    // 例如記錄請求結束時間,並把相應的資訊寫入到日至檔案中。    return SUCCESS; }

PHP核心探索:一次請求的開始與結束

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.