http://www.nowamagic.net/librarys/veda/detail/1285php
SAPI:Server Application Programming Interface 服務器端應用編程接口。 它提供了一個接口,使得PHP能夠和其餘應用進行交互數據。apache
PHP的架構圖編程
SAPI指的是PHP具體應用的編程接口, PHP腳本要執行有不少種方式,經過Web服務器,或者直接在命令行下,也能夠嵌入在其餘程序中。服務器
腳本執行的開始都是以SAPI接口實現開始的。只是不一樣的SAPI接口實現會完成他們特定的工做, 例如Apache的mod_php SAPI實現須要初始化從Apache獲取的一些信息,在輸出內容是將內容返回給Apache, 其餘的SAPI實現也相似。架構
SAPI提供了一個和外部通訊的接口, 對於PHP5.2,默認提供了不少種SAPI, 常見的給apache的mod_php5,CGI,給IIS的ISAPI,還有Shell的CLI。函數
PHP開始執行之後會通過兩個主要的階段:url
開始階段有兩個過程:
第一個過程是模塊初始化階段(MINIT), 在整個SAPI生命週期內(例如Apache啓動之後的整個生命週期內或者命令行程序整個執行過程當中), 該過程只進行一次。
第二個過程是模塊激活階段(RINIT),該過程發生在請求階段, 例如經過url請求某個頁面,則在每次請求以前都會進行模塊激活(RINIT請求開始)。 例如PHP註冊了一些擴展模塊,則在MINIT階段會回調全部模塊的MINIT函數。 模塊在這個階段能夠進行一些初始化工做,例如註冊常量,定義模塊使用的類等等。.net
請求到達以後PHP初始化執行腳本的基本環境,例如建立一個執行環境,包括保存PHP運行過程當中變量名稱和值內容的符號表, 以及當前全部的函數以及類等信息的符號表。而後PHP會調用全部模塊的RINIT函數, 在這個階段各個模塊也能夠執行一些相關的操做 。命令行
請求處理完後就進入告終束階段,通常腳本執行到末尾或者經過調用exit()或die()函數, PHP都將進入結束階段。和開始階段對應,結束階段也分爲兩個環節,一個在請求結束後停用模塊(RSHUWDOWN,對應RINIT), 一個在SAPI生命週期結束(Web服務器退出或者命令行腳本執行完畢退出)時關閉模塊(MSHUTDOWN,對應MINIT)。blog