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模式下,生命周期流程如下:
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立刻開始關閉。)
?
原文鏈接:https://blog.csdn.net/u013778883/article/details/79831035
轉載于:https://www.cnblogs.com/mjhblog/p/11527871.html
總結
以上是生活随笔為你收集整理的PHP的工作原理和生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fast CGI 工作原理
- 下一篇: Codeforces 1209D Cow