Zend Enginephp
做爲 PHP
語言的核心, Zend Engine
存在於 PHP
源碼目錄中的 Zend
子目錄。apache
Why Zend Engine ?segmentfault
PHP3
採用的是邊解釋、邊執行的運行方式,運行效率不好。1997年,Zeev Suraski
和 Andi Gutmans
決定重寫代碼以解決這兩個問題。api
最終他倆把該項技術的核心引擎命名爲 Zend Engine
,Zend
的意思即爲 Zeev
+ Andi
。安全
Zend Engine 功能服務器
先進行預編譯( Compile
),而後再執行( Execute
)。函數
詞法分析(Lexer
):將代碼切分爲一個個的標記Toekn
。測試
語法分析(Parser
):語法檢查。ui
生成操做碼(opcode
):Zend
引擎對這些 Token
進行編譯, 將代碼編譯爲 opcode
,並綁定相應的參數、和函數調用。spa
執行(execute
):Zend
引擎執行這些 opcode
。
內存管理
詳細過程以下圖所示:
PHP源碼目錄結構
/ :主要包含一些說明文件以及設計方案。 Zend :Zend 引擎的實現目錄。包括詞法語法解析,OPCODE,提供語言運行環境。 TSRM :線程安全資源管理器。 build:放置一些和源碼編譯相關的一些文件。 ext :官方擴展目錄。包括array系列,pdo系列,spl系列等函數的實現。 main :最爲核心的文件,實現PHP的基本設施。 pear :PHP 擴展與應用倉庫。 sapi :各類服務器抽象層的代碼。例如apache的mod_php,cgi,fastcgi以及fpm等等接口。 tests:PHP的測試腳本集合。 scripts:Linux 下的腳本目錄。 win32:Windows平臺相關的一些實現。
PHP 核心
PHP
核心由兩部分組成:Zend Engine
和 PHP Core
。
PHP Core
綁定了 SAPI
層,PHP
對與上層 "服務器"
的通訊進行了抽象,把全部的邏輯都抽象、封裝到了SAPI
。
對於上層的服務器來講,它們對 PHP
的調用就能夠經過 SAPI
來進行,實現了"解耦和"
。
常見的調用 SAPI
方式有:
mod_php5
:PHP module for Apache
。CGI
:Fork-And-Execute
。 Fastcgi
:常駐 (Long-Live
) 型的 CGI
。CLI
:PHP
命令行模式。The Architecture of PHP