PHP的架構圖
PHP的架構圖
SAPI
SAPI(Server Application Programming Interfac) is an application programming interface (API) provided by the web server to help other developers in extending the web server capabilities.
SAPI是一個用來幫助其他開發程序擴展web服務器功能的應用程序接口(api)。它將外部條件抽象, 為內部的PHP提供一套固定統一的接口, 使得PHP自身實現能夠不受外部環境影響,保持一定的獨立性。
PHP中常用的SAPI有cli(命令行模式,單進程)、php-fpm、CGI、Apache...
有點像策略模式,使用相同的接口,但是實現會略有不同。
http://upload.ouliu.net/i/201801100105301e6ya.png
PHP的啟動和終止
- 請求之前的開始階段:
- MINIT:模塊初始化階段。初始化一些擴展、常量、類、資源等所有被php腳本用到的東西。(常駐內存,可以被所有請求使用。)
- PRINT:模塊激活階段。PHP會調用所有模塊的RINIT函數,在這個階段各個模塊也可以執行一些相關的操作,比如初始化
本次請求
使用到的變量。
- 請求之后的結束階段:
- RSHUTDOWN:這個頁面請求執行完畢,或者被用戶給die(exit)了, 這時PHP會啟動回收程序,回收本次請求使用的資源。這次會執行所有已加載擴展的RSHUTDOWN(俗稱Request Shutdown)方法, 這時候擴展可以利用內核中的變量表等做的一些事情。因為PHP一旦把所有擴展的RSHUTDOWN方法執行完,便會釋放掉這次請求使用過的所有資源,比如變量表的所有變量、所有在這次請求中申請的內存等。
- MSHUTDOWN:PHP執行所有擴展的MSHUTDOWN,釋放資源。
PHP的生命周期
1.單進程SAPI生命周期(CLI/CGI)
單進程SAPI生命周期
2.多進程SAPI生命周期(Apache2)
多進程SAPI生命周期
3.多線程的SAPI生命周期
多線程的SAPI生命周期
4.Embed
Embed SAPI是一種比較特殊的sapi,容許你在C/C++語言中調用PHP/ZE提供的函數。(不太了解,明天看一下! http://www.laruence.com/2008/09/23/539.html)
綜述
理一下PHP的生命周期,以及PHP整個執行過程。還有怎么通過SAPI和PHP模塊溝通.
(圖片基本是從參考鏈接那邊拿過來的,站在前人的肩膀上。)