PHP 核心分析(1):sapi_module_struct

發表於2016-12-07

這裡閱讀的php版本為PHP-7.1.0 RC3,閱讀程式碼的平臺為linux

首先是尋找php的入口,php有很多種模式,apache,php-fpm, cli模式,我要入手的話,只能先從最簡單的cli模型開始。

那麼,我需要先尋找

這個命令是如何執行的。

首先還是尋找main入口,由於我們看的是命令列的php程式。所以,這個入口在sapi/cli/php_cli.c中。

首先是定義一系列的變數

然後是這個

sapi_module_struct *sapi_module = &cli_sapi_module;

這是一個sapi_module_struct結構,這個結構是sapi中最重要的資料結構。它的定義在main/SAPI.h中。

下面是增加了註釋的程式碼:

那麼我們看下cli的SAPI的module是什麼樣子的呢?

其中我把裡面原先有的STANDARD_SAPI_MODULE_PROPERTIES巨集給解出來展示如下:

有幾個點可以總結:

cli模式是不需要傳送header的,所以對應header處理的三個函式

實際上都是空實現。

cookie也是同樣道理

其他的一些定義的函式,等到我們遇到的時候再分析吧。

main

回到main函式,根據上面的那個結構,我們就理解了

signal

參考

http://php.find-info.ru/php/016/ch23lev1sec1.html
http://foio.github.io/php-sapi/

相關文章