跟廠長學PHP核心(三):源碼目錄結構

來源:互聯網
上載者:User

標籤:進一步   header   and   令行   block   核心   php   date   soc   

上篇文章我們已經介紹了源碼分析工具的安裝、配置以及調試方法,本文我們來講述一下PHP源碼的目錄結構。

一、目錄概覽

php-7.0.12為例,看過源碼的同學們應該發現源碼目錄多達十多個,下面是每個目錄的說明。

目錄 說明
TSRM 線程相關安全的實現
Zend PHP解析器的核心實現
build linux下編譯相關的目錄
ext PHP的擴充
main PHP的主要代碼
netware 網路目錄,socket的定義與實現
pear PHP擴充及應用的代碼倉庫
sapi PHP的應用程式層介面
scripts Linux下的指令碼目錄
tests 測試指令碼目錄
travis 用於構建,非PHP特有目錄
win32 Windows下編譯PHP的相關指令碼
二、核心目錄

雖然源碼目錄眾多,但是核心目錄卻只有sapi、main、zend、ext、TSRM

2.1、SAPI

還記得PHP的應用情境嗎?我們可以在命令列中訪問PHP,也可以通過瀏覽器訪問PHP指令碼,甚至可以嵌入到單片機供C、C++程式調用。它們分別對應cli模式、fpm/cgi模式、embed模式,除了這些還有apache2handler、litespeed模式。

SAPI全稱Server API,負責PHP對外提供服務規範,它定義了結構體sapi_module_struct,該結構體定義了模式啟動、關閉、啟用、失效等多個鉤子函數指標,每個模式將這些函數指標指向自己的函數,就可以輕鬆擴充PHP對外服務的方式。以上幾種模式也正是實現了sapi_module_strcut才完成了PHP的多情境應用。

2.2、main

main目錄的作用是承接SAPI的請求,分析出要執行的指令檔和參數,並對環境和配置進行初始化,比如初始設定變數和常量、註冊函數、解析設定檔、載入擴充等等。

2.3、Zend

Zend目錄就是大家所熟知的Zend引擎,是PHP最核心的部分,主要負責PHP的文法實現、記憶體管理及指令碼的編譯運行環境等,它由編譯器、執行器兩部分組成。

編譯器負責將PHP代碼進行詞法、文法分析,並產生抽象文法樹,然後進一步編譯為opcode,opcode是Zend虛擬機器可識別的指令,php7一共有173個opcode,所有的文法都是由這些opcode組成的。執行器負責執行編譯器輸出的opcode。

2.4、ext

ext是extension的縮寫,它是擴充PHP核心功能的一種方式,分為PHP擴充與zend擴充,都支援使用者自訂開發,這兩種都比較常見,PHP擴充有gd、json、date、array等,而我們熟知的opcache就是Zend擴充。

2.5、TSRM

TSRM全稱叫做Thread Safe Resource Manager,也就是安全執行緒資源管理員。

我們知道,全域變數就是定義在函數外的變數,它屬於公用資源,在多線程的環境下,訪問公用資源就可能會引起衝突,TSRM就是為解決該問題而誕生的。它為每個線程分配一個獨立的自增ID,該ID作為當前線程的全域變數記憶體區的索引,從而實現線程的完全獨立。

其實PHP大部分SAPI都是單線程的,所以並不需要過多關注安全執行緒,但是在Apache或者使用者自己實現的PHP環境下,就需要考慮安全執行緒問題了。

跟廠長學PHP核心(三):源碼目錄結構

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.