PHP的執行流程及相關概念

來源:互聯網
上載者:User
這篇文章主要介紹了關於PHP的執行流程及相關概念,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

程式架構

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

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

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

SAPI層對某些人可能相對陌生。SAPI提供一套統一的介面,讓上層應用程式與實際運行環境解耦。使用者寫的PHP檔案,可以用命令列執行,也可以在Apache httpd或FPM中執行。背後的支援工作由SAPI提供,開發人員無感知。通過SAPI,PHP指令碼層無需過多考慮執行的具體環境,而PHP本身則可以讓SAPI針對自己的特點給出特有實現。

執行流程

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

  1. 程式啟動,Zend引擎和核心組件初始化;

  2. 拓展初始化(MINIT);

  3. 收到請求,拓展啟用(RINIT);

  4. 解析、執行PHP指令碼;

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

  6. 卸載拓展(MSHUTDOWN);

  7. 程式關閉

除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進程,兩者沒什麼關係。

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

  1. web伺服器。常見的Apache httpd和Nginx;

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

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

  4. 程式。即php-cgi和php-fpm。

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

總結

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

感謝閱讀,歡迎指正!

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.