這篇文章帶給大家的內容是關於php生命週期的詳解(圖),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
第一個過程是模組初始化階段(MINIT), 在整個SAPI生命週期內(例如Apache啟動以後的整個生命週期內或命令列程式整個執行過程中), 過程只進行一次。第二個過程是模組啟動階段(RINIT),該過程發生在請求階段, 例如透過url請求某個頁面,則在每次請求之前都會進行模組啟動(RINIT請求開始)
請求到達之後PHP初始化執行腳本的基本環境,例如建立一個執行環境,包括保存PHP運行過程中變數名稱和值內容的符號表, 以及目前所有的函數以及類別等資訊的符號表。然後PHP會呼叫所有模組的RINIT函數, 在這個階段各個模組也可以執行一些相關的操作
一般腳本執行到結尾或透過呼叫exit()或die()函數, PHP都將進入結束階段。和開始階段對應,結束階段也分為兩個環節,一個在請求結束後停用模組(RSHUTDOWN,對應RINIT),一個在SAPI生命週期結束(Web伺服器退出或命令列腳本執行完畢退出)時關閉模組(MSHUTDOWN,對應MINIT)
單一進程SAPI生命週期
開始- 請求開始- 請求關閉- 結束
#啟動
#在呼叫每個模組的模組初始化前,會有一個初始化的過程,它包括:
初始化若干全域變數
#初始化若干常數
在處理了檔案相關的內容,PHP會呼叫php_request_startup做請求初始化操作。請求初始化操作,除了圖中顯示的調用每個模組的請求初始化函數外,還做了較多的其它工作,其主要內容如下:
#
這裡的環境初始化是指在使用者空間中需要用到的一些環境變數初始化,這裡的環境包括伺服器環境、請求資料環境等。實際到我們用到的變量,就是P#OST、#_GET、C OOKI#E、_SERVER、 #E
V
##、_FILES。
模組要求初始化
######運行############DEACTIVATION###### ###PHP關閉請求的過程是一個若干個關閉操作的集合,這個集合存在於php_request_shutdown函數中。這個集合包括如下:###呼叫所有透過register_shutdown_function()註冊的函數。這些在關閉時呼叫的函數是在用戶空間添加進來的。一個簡單的例子,我們可以在腳本出錯時呼叫一個統一的函數,給使用者一個友善一些的頁面,這個有點類似網頁中的404頁面。
執行所有可用的__destruct函數。這裡的析構函數包括在物件池(EG(objects_store)中的所有物件的析構函數以及EG(symbol_table)中各個元素的析構方法。
將所有的輸出刷出去。
傳送HTTP應答頭。這也是一個輸出字串的過程,只是這個字串可能符合某些規範。
遍歷每個模組的關閉請求方法,執行模組的請求關閉操作,這就是我們在圖中看到的Call each extension's RSHUTDOWN。
銷毀全域變數表(PG(http_globals))的變數。
透過zend_deactivate函數,關閉詞法分析器、語法分析器和中間程式碼執行器。
呼叫每個擴充的post-RSHUTDOWN函數。只是基本每個擴充的post_deactivate_func函數指標都是NULL。
關閉SAPI,透過sapi_deactivate銷毀SG(sapi_headers)、SG(request_info)等的內容。
關閉流的包裝器、關閉流的包裝器、關閉流的包裝器、關閉流流的過濾器。
關閉記憶體管理。
重新設定最大執行時間
結束
##最終到了要收尾的地方了。
flushsapi_flush將最後的內容刷新出去。其呼叫的是sapi_module.flush,在CLI模式下等價於fflush函數。
#關閉Zend引擎zend_shutdown將關閉Zend引擎。
以上是php生命週期的詳解(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!