PHP的工作原理和生命周期


版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u013778883/article/details/79831035
 

php是一門適用於web開發的動態語言,它可以說是一個用C語言實現的包含大量組件的軟件框架。那么,php是如何工作的呢?它的生命周期是怎么樣的呢?

目錄

 

 


表層分析

php是以請求/響應為周期運行服務端應用程序,當請求進入應用程序,流程如下:
請求流程圖
php的每一個請求都會重復以上的交互。

底層分析

php的運行模式有兩種:web模式和cli模式。無論是哪種公眾模式,php的工作原理都是一樣的,都是作為一種SAPI運行。首先,認識下SAPI,它是什么?

Sapi全稱是Server Application Programming Interface,也就是服務端應用編程接口,Sapi通過一系列鈎子函數,使得PHP可以和外圍交互數據,這是PHP非常優雅和成功的一個設計,通過sapi成功的將PHP本身和上層應用解耦隔離,PHP可以不再考慮如何針對不同應用進行兼容,而應用本身也可以針對自己的特點實現不同的處理方式。

常見的SAPI有cli、cgi、php-fpm以及各服務具體的sapi。
在php的生命周期中,有4個關鍵調用:
生命周期關鍵調用

nginx服務器為例,在web模式下,生命周期流程如下:
php生命周期例

SAPI運行PHP都經過下面幾個階段:
1、模塊初始化階段(module init):
這個階段主要進行php框架、zend引擎的初始化操作。這個階段一般是在SAPI啟動時執行一次,對於FPM而言,就是在fpm的master進行啟動時執行的。php加載每個擴展的代碼並調用其模塊初始化例程(MINIT),進行一些模塊所需變量的申請,內存分配等。

2、請求初始化階段(request init):
當一個頁面請求發生時,在請求處理前都會經歷的一個階段。對於fpm而言,是在worker進程accept一個請求並讀取、解析完請求數據后的一個階段。在這個階段內,SAPI層將控制權交給PHP層,PHP初始化本次請求執行腳本所需的環境變量。

3、php腳本執行階段
php代碼解析執行的過程。Zend引擎接管控制權,將php腳本代碼編譯成opcodes並順次執行

4、請求結束階段(request shutdown):
請求處理完后就進入了結束階段,PHP就會啟動清理程序。這個階段,將flush輸出內容、發送http響應內容等,然后它會按順序調用各個模塊的RSHUTDOWN方法。 RSHUTDOWN用以清除程序運行時產生的符號表,也就是對每個變量調用unset函數。

5、模塊關閉階段(module shutdown):
該階段在SAPI關閉時執行,與模塊初始化階段對應,這個階段主要是進行資源的清理、php各模塊的關閉操作,同時,將回調各擴展的module shutdown鈎子函數。這是發生在所有請求都已經結束之后,例如關閉fpm的操作。(這個是對於CGI和CLI等SAPI,沒有“下一個請求”,所以SAPI立刻開始關閉。)

PHP的核心架構圖

截圖於:PHP底層的運行機制與原理
這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM