基於PHP-5.3.8源代碼給大家分享一下PHP的內核結構,以便更好的理解PHP腳本的執行過程和寫出高效率的腳本。
目錄結構如下:
1. build 和編譯有關的目錄,裡面包括wk,awk和sh腳本用於編譯處理,其中m4文件是linux下編譯程序自動生成的文件,可以使用buildconf命令操作具體的配置文件。
2. ext 擴展庫代碼,例如Mysql,gd,zlib,xml,iconv 等我們熟悉的擴展庫,ext_skel是linux下擴展生成腳本,windows下使用ext_skel_win32.php腳本生成,
每個擴展目錄下包括php_擴展名.c文件和phpt批處理測試腳本。
3. main 主目錄,包括php.h,main.c,logos.h數組等等,是php程序的主要部分,定義了程序的SAPI接口全局變量等等。
4. netware 網絡目錄,以前的版本沒有此目錄,裡面就兩個文件sendmail_nw.h和start.c,分別定義SOCK通信說需要的頭文件和具體實現。
5. pear 擴展包目錄,PHP Extension and Application Repository的簡寫,install-pear.txt文件中詳細說明了怎麼樣安裝具體的擴展包,自己去看吧。
6. sapi 和各種服務器的接口調用,例如apache、IIS等,也包含一般的fastcgi、cgi等,如果你看過apache的源代碼的話,這個目錄一目了然的清楚了,比如apache_hooks和apache2handler等等。
7. scripts Linux 下的腳本目錄。
8. tests 測試腳本目錄,主要是phpt腳本,由--TEST--,--POST--,--FILE--和--EXPECT--三個部分組成。有些需要初始化的可以加--INI--部分。
9. TSRM 線程安全資源管理器,Thread Safe Resource Manager的縮寫,研究過PHP的源碼,你就會看到這個東西到處都在,保證在單線程和多線程模型下的線程安全和代碼一致性。
10. win32目錄,Windows 下編譯PHP 有關的腳本,用了WSH。
11. Zend 文件夾核心的引擎,包括PHP的生命周期,內存管理,變量定義和賦值以及函數宏定義等等。
如果你有更好的看法,請回郵件討論,謝謝