php原始碼的目錄結構:
build顧名思義,這裡主要放置一些和原始碼編譯相關的一些檔案,比如開始構建之前的buildconf指令碼等檔案,還有一些檢查環境的指令碼等。
ext官方擴充套件目錄,包括了絕大多數php的函式的定義和實現,如array系列,pdo系列,spl系列等函式的實現,都在這個目錄中。個人寫的擴充套件在測試時也可以放到這個目錄,方便測試和除錯。
main這裡存放的就是php最為核心的檔案了,主要實現php的基本設施,這裡和zend引擎不一樣,zend引擎主要實現語言最核心的語言執行環境。
zendzend引擎的實現目錄,比如指令碼的詞法語法解析,opcode的執行以及擴充套件機制的實現等等。
pear「php 擴充套件與應用倉庫」,包含pear的核心檔案。
sapi包含了各種伺服器抽象層的**,例如apache的mod_php,cgi,fastcgi以及fpm等等介面。
tsrmphp的執行緒安全是構建在tsrm庫之上的,php實現中常見的*g巨集通常是對tsrm的封裝,tsrm(thread safe resource manager)執行緒安全資源管理器。
testsphp的測試指令碼集合,包含php各項功能的測試檔案
win32這個目錄主要包括windows平台相關的一些實現,比如sokcet的實現在windows下和*nix平台就不太一樣,同時也包括了windows下編譯php相關的指令碼。
php的測試比較有意思,它使用php來測試php,測試php指令碼在/run-tests。php,這個指令碼讀取tests目錄中phpt檔案。讀者可以開啟這些看看,php定義了一套簡單的規則來測試,例如一下的這個測試指令碼/tests/basic/001。phpt:
--test--
trivial "hello world" test
--file--
<?php
echo
"hello world"
?>
--expect--
hello world
這段測試指令碼很容易看懂,執行--file--下面的php檔案,如果最終的輸出是--expect--所期望的結果則表示這個測試通過,可能會有讀者會想,如果測試的指令碼不小心觸發fatal error,或者丟擲未**獲的異常了,因為如果在同乙個程序中執行,測試就會停止,後面的測試也將無法執行,php中有很多將指令碼隔離的方法比如: system(),exec()等函式,這樣可以使用主測試程序服務排程被測指令碼和檢測測試結果,通過這些外部呼叫執行測試。 php測試使用了proc_open()函式,這樣就可以保證測試指令碼和被測試指令碼之間能隔離開。 php 原始碼結構
目錄結構 1.build 和編譯有關的目錄。2.ext 擴充套件庫 例如 mysql zlib iconv 等我們熟悉的擴充套件庫。3.main 主目錄。4.sapi 和各種伺服器的介面呼叫,例如apache iis等,也包含一般的fastcgi cgi等。5.win32 和 windows 下編譯...
WebRTC原始碼目錄結構
base 基礎平台庫,包括執行緒 鎖 socket等 build 編譯指令碼,gyp common audio 基礎公共的音訊處理 common audio include 就乙個型別轉換標頭檔案 common audio resampler 音訊重取樣 common audio signal pr...
OpenWrt原始碼目錄結構
tools和toolchain目錄 包含了一些通用命令,用來生成韌體,編譯器,和c庫.build dir host目錄 是乙個臨時目錄,用來儲存不依賴於目標平台的工具.build dir toolchain 目錄 用來儲存依賴於指定平台的編譯鏈.只是編譯檔案存放目錄無需修改.build dir ta...