麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > PHP > 正文

PHP的執(zhí)行流程及相關(guān)概念

2020-03-22 19:54:38
字體:
供稿:網(wǎng)友
這篇文章主要介紹了關(guān)于PHP的執(zhí)行流程及相關(guān)概念,有著一定的參考價值,現(xiàn)在分享給大家,有需要的朋友可以參考一下

程序架構(gòu)

先看看運行一個PHP程序需要哪些支撐。一切的起點,要從程序員開始寫PHP才有意義,所以應(yīng)用層面的PHP腳本文件(包括Composer/include的各種第三方PHP代碼)是必須的。腳本文件要解析編譯后才能執(zhí)行,所以PHP虛擬機(jī)(通常是Zend引擎)也是必備的。此外PHP腳本中會使用多個拓展中的函數(shù)和類,所以拓展(包括官方、PECL、以及用戶自行寫的拓展)幾乎也是必備的。另外PHP程序要與外部交互(例如從命令行獲取參數(shù)、從web服務(wù)器獲取請求信息),這一層由SAPI負(fù)責(zé),所以SAPI也是必須的。

總結(jié)以上,PHP程序的架構(gòu)從上往下看有四層,分別是:應(yīng)用層、SAPI層、拓展層和Zend引擎。架構(gòu)關(guān)系見下圖:

1267701670-5b39fb27e1871_articlex[1].jpg

(圖片來源:http://www.nowamagic.net/libr...)

SAPI層對某些人可能相對陌生。SAPI提供一套統(tǒng)一的接口,讓上層html' target='_blank'>應(yīng)用程序與實際運行環(huán)境解耦。用戶寫的PHP文件,可以用命令行執(zhí)行,也可以在Apache httpd或FPM中執(zhí)行。背后的支持工作由SAPI提供,開發(fā)人員無感知。通過SAPI,PHP腳本層無需過多考慮執(zhí)行的具體環(huán)境,而PHP本身則可以讓SAPI針對自己的特點給出特有實現(xiàn)。

執(zhí)行流程

拋開各個SAPI實現(xiàn)上的差異,PHP程序的執(zhí)行流程可以簡單歸結(jié)如下:

程序啟動,Zend引擎和核心組件初始化

拓展初始化(MINIT);

收到請求,拓展激活(RINIT);

解析、執(zhí)行PHP腳本;

請求結(jié)束,拓展停用(RSHUTDOWN);

卸載拓展(MSHUTDOWN);

程序關(guān)閉

除345,其余幾步在整個SAPI生命周期中只會執(zhí)行一次。CGI/CLI模式下,345也只執(zhí)行一次。

理解PHP程序的生命周期,是PHP進(jìn)階的必備過程,也能幫助開發(fā)人員快速定位問題。例如腳本報函數(shù)不存在,很有可能是某個拓展缺失或加載出錯;在CLI/CGI模式下,再怎么pconnect也是徒勞的,腳本一執(zhí)行完資源就釋放掉;exit/die終止的是腳本的執(zhí)行,不一定意味著進(jìn)程的結(jié)束;腳本編譯后常駐內(nèi)存,不會反復(fù)執(zhí)行RINIT和RSHUTDOWN,是CLI框架相對于其他運行模式的性能提升點;等等。

SAPI生命周期中各個階段的更多細(xì)節(jié),請參考《深入理解PHP內(nèi)核》一書。

CGI、FastCGI、PHP-FPM等

CGI/FastCGI/php-cgi和PHP-FPM是幾個容易讓PHP開發(fā)人員困惑和混淆的概念。這幾個概念的關(guān)系如下:

CGI/FastCGI:網(wǎng)關(guān)協(xié)議,與語言無關(guān),所以與PHP關(guān)系也不大。兩者的區(qū)別是FastCGI可以獨立于web服務(wù)器,運行FastCGI協(xié)議的程序變成web服務(wù)器的內(nèi)容提供方(上游)。另外與web服務(wù)器解耦后,用FastCGI協(xié)議交互的進(jìn)程具有性能好、安全穩(wěn)定、支持分布式等優(yōu)點;php-cgi:實現(xiàn)FastCGI協(xié)議的PHP解析器,不能平滑重啟和熱加載;FPM:PHP官方的FastCGI進(jìn)程管理器,可執(zhí)行程序為php-fpm;支持平滑重啟、熱加載,運行穩(wěn)定;其管理對象不是php-cgi進(jìn)程,兩者沒什么關(guān)系。

僅是幾個概念比較容易容易區(qū)分,實際上混淆開發(fā)人員的是以下四組概念的綜合:

web服務(wù)器。常見的Apache httpd和Nginx;

SAPI。常見的是apache2handler、cli、fpm-fcgi;

協(xié)議。文中提到的CGI和FastCGI;

程序。即php-cgi和php-fpm。

由于web服務(wù)器對大多數(shù)人更熟悉,拿之說一下與其他概念的關(guān)系:使用Apache httpd時,90%以上的情況以模塊方式執(zhí)行PHP腳本,所以與SAPI中的apache2handler有關(guān),與其他概念無關(guān)(既不是CGI也不是FastCGI協(xié)議);使用Nginx時,90%的情況是通過FastCGI協(xié)議將請求轉(zhuǎn)發(fā)到FPM,所以與SAPI中的fpm-fcgi、協(xié)議中的FastCGI、程序中的php-fpm三個概念有關(guān),與其他概念無關(guān)。

總結(jié)

本文簡要回顧了PHP程序的架構(gòu)和執(zhí)行流程,并對幾個容易混淆概念做了介紹。

感謝閱讀,歡迎指正!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請關(guān)注PHP !

相關(guān)推薦:

PHP容器Pimple運行流程的分析

使用 Laravel 服務(wù)容器的優(yōu)勢

以上就是PHP的執(zhí)行流程及相關(guān)概念的詳細(xì)內(nèi)容,PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄污污网站 | 九一免费版在线观看 | 欧美成人精品不卡视频在线观看 | 国产人成免费爽爽爽视频 | 色羞羞 | 日韩黄色免费电影 | 欧美人与牲禽动交精品一区 | 久草成人在线 | 久久久经典视频 | 日韩欧美精品电影 | 久久久成人动漫 | 一级做a爱片久久毛片a高清 | 精品视频 久久久 | 久久精品亚洲一区 | 欧美国产日韩在线观看成人 | 国产精品成人免费一区久久羞羞 | 久久爽久久爽久久av东京爽 | 亚洲网站一区 | 在线看免电影网站 | 中日无线码1区 | 国产精品久久久久久久久久三级 | 久久草在线视频国产 | 久草在线视频网 | 免费日本一区二区 | 美女毛片儿 | 成人精品免费在线观看 | 黄色一级片免费在线观看 | 久久精品国产99国产精品亚洲 | 久久久久九九九女人毛片 | 成人在线免费观看小视频 | 亚洲精品在线观看免费 | 亚洲视频精选 | 色淫网站免费视频 | bt 自拍 另类 综合 欧美 | 性欧美大战久久久久久久免费观看 | 国产大片中文字幕在线观看 | caoporn国产一区二区 | 欧美日韩免费一区 | 久草在线播放视频 | 99爱视频在线观看 | 天天色综合2 |