php 原始碼結構

2021-06-09 17:20:54 字數 1927 閱讀 7839

目錄結構

1. build 和編譯有關的目錄。

2. ext 擴充套件庫**,例如 mysql、zlib、iconv 等我們熟悉的擴充套件庫。

3. main 主目錄。

4. sapi 和各種伺服器的介面呼叫,例如apache、iis等,也包含一般的fastcgi、cgi等。

5. win32 和 windows 下編譯 php 有關的指令碼。用了 wsh。

6. zend 資料夾核心的引擎。

7. scripts linux 下的指令碼目錄。

8. tests 測試指令碼目錄

9. sapi 各類 web 伺服器的介面。

php使用lex和yacc對語法進行解析。

在 zend 目錄下有兩個檔案 zend_language_parser.y 與 zend_language_scanner.l 他們是lex和yacc的指令碼檔案,通過這兩個指令碼檔案生成對應的.c和.h檔案,實際上這在 linux 下非常普遍,gcc 也使用它們產生語樹。

php如何使用mysql?

ext 目錄下有乙個 mysql 子目錄,這個目錄中的php_mysql.c 和 php_mysql.h 負責 php 與 mysql 操作。使用了 mysql 手冊中的 c 語言 api。

安全模式?

main 資料夾下的safe_mode.h 和 safe_mode.c 檔案負責php的安全模式。

那些是 php 的標準函式,那些是擴充套件函式?

ext 目錄下英文意思是擴充套件,而在 ext 下還是有乙個 standard 資料夾,存放著 php 中的標準函式,例如 explode 這個函式是在./ext/standard/string.c 下定義的。

php 源**中的php_function(xx) 巨集。

這個巨集用來檢驗乙個函式名稱是否合法。合法的函式名稱應該由小寫字母及下劃線組成。

那些函式集是標準的?

通過 ./ext/standard/ 目錄我們可以看到以下常用函式集是標準的。字串函式集、陣列函式集、檔案及目錄操作函式集、md5演算法等。

一些函式的實現過程

1. fsockopen, pfsockopen 的實現

這兩個函式的實現離不開 ./ext/standard/fsock.c 檔案中的 php_fsockopen_stream 函式。具體的socket都在./main/network.c 中實

現。php 函式集註冊過程

在./main/internal_functions.c 中有乙個陣列 php_builtin_extensions 預設下有以下成員:

1. phpext_bcmath_ptr

2. phpext_calendar_ptr

3. phpext_com_dotnet_ptr

4. phpext_ctype_ptr

5. phpext_date_ptr

6. phpext_ftp_ptr

7. phpext_hash_ptr

8. phpext_odbc_ptr

9. phpext_pcre_ptr

10. phpext_reflection_ptr

11. phpext_session_ptr

12. phpext_spl_ptr

13. phpext_standard_ptr

14. phpext_tokenizer_ptr

15. phpext_zlib_ptr

接著 php_register_extensions(php_builtin_extensions, extcount tsrmls_cc) 進行註冊

PHP原始碼的目錄結構

php原始碼的目錄結構 build顧名思義,這裡主要放置一些和原始碼編譯相關的一些檔案,比如開始構建之前的buildconf指令碼等檔案,還有一些檢查環境的指令碼等。ext官方擴充套件目錄,包括了絕大多數php的函式的定義和實現,如array系列,pdo系列,spl系列等函式的實現,都在這個目錄中。...

php原始碼探索四 php擴充套件原始碼分析

1 最重要的entry 比如exif裡的 zend module entry exif module entry struct zend module entry 引數 描述 size,zend api,zend debug and zts 通常使用standard module header來填充...

PHP原始碼安裝

1.安裝libiconv tar zxvf libiconv 1.13.1.tar.gz cd libiconv 1.13.1 configure prefix usr local libiconv make make install 2.libmcrypt安裝 tar zxvf libmcrypt...