日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP的工作原理和生命周期

發(fā)布時間:2024/4/17 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP的工作原理和生命周期 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

表層分析
php是以請求/響應(yīng)為周期運行服務(wù)端應(yīng)用程序,當請求進入應(yīng)用程序,流程如下:

php的每一個請求都會重復(fù)以上的交互。

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

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

常見的SAPI有cli、cgi、php-fpm以及各服務(wù)具體的sapi。
在php的生命周期中,有4個關(guān)鍵調(diào)用:


以nginx服務(wù)器為例,在web模式下,生命周期流程如下:


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

2、請求初始化階段(request init):
當一個頁面請求發(fā)生時,在請求處理前都會經(jīng)歷的一個階段。對于fpm而言,是在worker進程accept一個請求并讀取、解析完請求數(shù)據(jù)后的一個階段。在這個階段內(nèi),SAPI層將控制權(quán)交給PHP層,PHP初始化本次請求執(zhí)行腳本所需的環(huán)境變量。

3、php腳本執(zhí)行階段
php代碼解析執(zhí)行的過程。Zend引擎接管控制權(quán),將php腳本代碼編譯成opcodes并順次執(zhí)行

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

5、模塊關(guān)閉階段(module shutdown):
該階段在SAPI關(guān)閉時執(zhí)行,與模塊初始化階段對應(yīng),這個階段主要是進行資源的清理、php各模塊的關(guān)閉操作,同時,將回調(diào)各擴展的module shutdown鉤子函數(shù)。這是發(fā)生在所有請求都已經(jīng)結(jié)束之后,例如關(guān)閉fpm的操作。(這個是對于CGI和CLI等SAPI,沒有“下一個請求”,所以SAPI立刻開始關(guān)閉。)

?

原文鏈接:https://blog.csdn.net/u013778883/article/details/79831035

轉(zhuǎn)載于:https://www.cnblogs.com/mjhblog/p/11527871.html

總結(jié)

以上是生活随笔為你收集整理的PHP的工作原理和生命周期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。