Php 體繫結構及其執行概述:
php採用的是典型的模組化,分層的思想。方便擴充和維護。 從上到下一次為:
一、sapi
Server Application Programming Interface (sapi)服務端應用編程連接埠.
看似很高深的概念,其實說白了就是這樣一個東西,伺服器程式(例如:apache,ngnix)和外圍程式定義了一個約定,說咱們提供幾個函數,他們的函數名稱是xxx 參數是xxx 然後我們之間就可以正常調用(例如php,例如asp或者一些伺服器的外掛程式)。例如如果是在linux下與apache通訊 則就是調用的apache_2.x.so
二、php 向外延展群組件
為php提供擴充功能的一些組件,例如我們常用的mysql驅動,加密加密解密組建 。這些組件為php提供了一些擴充功能。在php中我們可以通過函數調用的形式調用他們。
三、php層
負責與sapi層互動控制整個php啟動並執行流程。其實也就是說調用擴充和zend核心。同時也包括檔案處理等一些php核心部分。
四、zend引擎
php的核心實現,實現php的編譯過程(詞法分析,文法分析,語義分析等) 產生opcode, 執行opcode。其實就是個編譯器加虛擬機器。
Php的執行分兩種情況,一種命令列執行方式,一種php網頁執行方式
命令列執行時候:
首先會初始化一些環境,包括載入設定檔,載入向外延展群組件等。其次調用zend核心引擎產生opcode。然後執行此opcode,執行過程中如果遇到調用擴充函數,則調用相應的向外延展群組件入口函數。
最後執行完畢,清理現場,包括釋放記憶體等。
網頁的執行:(以apache為例)
有兩種模式這是通過apache來配置的。一種是module模式。此模式中,當apache啟動時候,會載入一個php模組,建立php處理進程,等待請求。當apache收到一個請求php頁面的請求時候(這裡是指最終定位的資源是php檔案,對於採取了url重寫你請求的可能是.html但是最終執行的卻是.php檔案也算在內)則會調用php進程去處理,其處理流程和命令列下相同,處理完畢則返回輸出結果給apache,apache負責向用戶端返回http應答。
一種模式是cgi模式。cgi模式不積極式載入php模組,而是每次請求則產生一個php進程。通過訊息發送給php進程處理,處理完畢後返回給apapche。
這個是小弟的學習筆記:可能理解上會有很多錯誤,乞求各位看客協助指正,以求進步。