Zend Engine & PHP

Zend Enginephp

做爲 PHP 語言的核心, Zend Engine 存在於 PHP 源碼目錄中的 Zend 子目錄。apache

Why Zend Engine ?segmentfault

  • PHP3 採用的是邊解釋、邊執行的運行方式,運行效率不好。
  • 代碼總體耦合度比較高,可擴展性也不夠好。

1997年,Zeev SuraskiAndi Gutmans 決定重寫代碼以解決這兩個問題。api

最終他倆把該項技術的核心引擎命名爲 Zend EngineZend 的意思即爲 Zeev + Andi安全

Zend Engine 功能服務器

先進行預編譯( Compile ),而後再執行( Execute )。函數

  • 詞法分析(Lexer):將代碼切分爲一個個的標記Toekn測試

  • 語法分析(Parser):語法檢查。ui

  • 生成操做碼(opcode):Zend 引擎對這些 Token 進行編譯, 將代碼編譯爲 opcode,並綁定相應的參數、和函數調用。spa

  • 執行(execute):Zend 引擎執行這些 opcode

  • 內存管理

詳細過程以下圖所示:

Zend Engine的功能

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 EnginePHP Core

PHP Core 綁定了 SAPI 層,PHP 對與上層 "服務器" 的通訊進行了抽象,把全部的邏輯都抽象、封裝到了SAPI

對於上層的服務器來講,它們對 PHP 的調用就能夠經過 SAPI 來進行,實現了"解耦和"

常見的調用 SAPI 方式有:

  • mod_php5PHP module for Apache
  • CGIFork-And-Execute
  • Fastcgi:常駐 (Long-Live) 型的 CGI
  • CLIPHP 命令行模式。

The Architecture of PHP

The architecture of PHP.

相關文章
相關標籤/搜索