国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP的執行流程及相關概念

2020-03-22 19:54:38
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了關于PHP的執行流程及相關概念,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

程序架構

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

總結以上,PHP程序的架構從上往下看有四層,分別是:應用層、SAPI層、拓展層和Zend引擎。架構關系見下圖:

1267701670-5b39fb27e1871_articlex[1].jpg

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

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

執行流程

拋開各個SAPI實現上的差異,PHP程序的執行流程可以簡單歸結如下:

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

拓展初始化(MINIT);

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

解析、執行PHP腳本;

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

卸載拓展(MSHUTDOWN);

程序關閉

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

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

SAPI生命周期中各個階段的更多細節,請參考《深入理解PHP內核》一書。

CGI、FastCGI、PHP-FPM等

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

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

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

web服務器。常見的Apache httpd和Nginx;

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

協議。文中提到的CGI和FastCGI;

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

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

總結

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

感謝閱讀,歡迎指正!

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

PHP容器Pimple運行流程的分析

使用 Laravel 服務容器的優勢

以上就是PHP的執行流程及相關概念的詳細內容,PHP教程

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐东| 皋兰县| 新和县| 绥滨县| 大冶市| 随州市| 嘉兴市| 清新县| 固镇县| 蓬溪县| 合阳县| 白河县| 奉节县| 阳原县| 甘泉县| 政和县| 高青县| 安图县| 砚山县| 浦城县| 秀山| 洪湖市| 河池市| 公主岭市| 福鼎市| 武冈市| 张家川| 玛沁县| 和政县| 陕西省| 滦平县| 清丰县| 清流县| 称多县| 防城港市| 山西省| 黄陵县| 墨竹工卡县| 甘德县| 大足县| 黄石市|