PHP一次請求生命週期

2021-07-15 23:30:09 字數 1312 閱讀 6917

原文:

我們從未手動開啟過php的相關程序,它是隨著apache的啟動而執行的。php通過mod_php5.so模組和apache相連(具體說來是sapi,即伺服器應用程式程式設計介面)。

php總共有三個模組:核心、zend引擎、以及擴充套件層。

比如,我們需要mysql擴充套件來連線mysql資料庫; 當ze執行程式時可能會需要連線若干擴充套件,這時ze將控制權交給擴充套件,等處理完特定任務後再返還;最後,ze將程式執行結果返回給php核心,它再將結果傳送給sapi層,最終輸出到瀏覽器上。

深入**

真正的內部執行過程沒有這麼簡單。以上過程只是個簡略版,讓我們再深入挖掘一下,看看幕後還發生了些什麼。

apache啟動後,php解釋程式也隨之啟動。php的啟動過程有兩步:

php啟動第一步

不清楚什麼第一第二步是什麼?別擔心,我們接下來詳細討論一下。讓我們先看看第一步,也是最主要的一步。要記住的是,第一步的操作在任何請求到達之前就發生了。

啟動apache後,php解釋程式也隨之啟動。php呼叫各個擴充套件的minit方法,從而使這些擴充套件切換到可用狀態。看看php.ini檔案裡開啟了哪些擴充套件吧。 minit的意思是「模組初始化」。各個模組都定義了一組函式、類庫等用以處理其他請求。

乙個典型的minit方法如下:

1php_minit_function(extension_name)

php啟動第二步

1php_rinit_function(extension_name)

php關閉第一步

如同php啟動一樣,php的關閉也分兩步。一旦頁面執行完畢(無論是執行到了檔案末尾還是用exit或die函式中止),php就會啟動清理程式。它會按順序呼叫各個模組的rshutdown方法。 rshutdown用以清除程式執行時產生的符號表,也就是對每個變數呼叫unset函式。

乙個典型的rshutdown方法如下:

1php_rshutdown_function(extension_name)

php關閉第二步

最後,所有的請求都已處理完畢,sapi也準備關閉了,php開始執行第二步:php呼叫每個擴充套件的mshutdown方法,這是各個模組最後一次釋放記憶體的機會。

乙個典型的rshutdown方法如下:

1php_mshutdown_function(extension_name)

這樣,整個php生命週期就結束了。要注意的是,只有在伺服器沒有請求的情況下才會執行「啟動第一步」和「關閉第二步」。

PHP底層探索 三 一次請求生命週期

我們從未手動開啟過php的相關程序,它是隨著apache的啟動而永興的.php通過mod php5.so模組和apache相連 具體說是sapi php總共有三個模組 核心 zend引擎 擴充套件層 比如,我們需要mysql擴充套件來來接mysql資料庫 當ze執行程式時,可能會需要連線若干擴充套件...

django請求生命週期

wsgi,他就是socket服務端,用於接收使用者請求並將請求進行初次封裝,然後將請求交給web框架 flask django 框架對wsgi封裝好的請求再次封裝,封裝成request 中介軟體,幫助我們對請求進行校驗或在請求物件中新增其他相關資料,例如 csrf request.session 路...

djanao請求生命週期

瀏覽器傳送請求到服務端 服務端的wsgi伺服器接收到來自瀏覽器的請求,對request做一些預處理,把瀏覽器的請求資訊 請求方式,請求頭,socket資訊等 都封裝在request物件.中介軟體相當於django的門衛,能夠對所有的請求做乙個過濾和校驗作用,例如常見的csrf 跨站請求偽造 就可以通...