PHP核心原始碼閱讀過程(二)

2021-09-17 03:43:16 字數 2235 閱讀 6705

接上篇,這裡一開始是sapi的初始化

1. sapi_startup函式

sapi_api void sapi_startup(sapi_module_struct *sf)

以上將win32平台和多執行緒安全的**刪除了,總共就4行。

最後乙個reentrancy_startup是乙個執行緒安全開啟的情況下才有效的函式,其他情況下是乙個巨集

#if !defined(zts)

#undef php_need_reentrancy

#endif

#if defined(php_need_reentrancy)

void reentrancy_startup(void);

void reentrancy_shutdown(void);

#else

#define reentrancy_startup()

#define reentrancy_shutdown()

#endif

2. sapi_globals_ctor 初始化全部變數 sapi_globals

static void sapi_globals_ctor(sapi_globals_struct *sapi_globals)

初始化預設接受的post請求型別

#define multipart_content_type "multipart/form-data"

static const sapi_post_entry php_post_entries = , ,

};int php_setup_sapi_content_types(void)

sapi_api int sapi_register_post_entries(const sapi_post_entry *post_entries)

p++;

} return success;

}sapi_api int sapi_register_post_entry(const sapi_post_entry *post_entry)

key = zend_string_init(post_entry->content_type, post_entry->content_type_len, 1);

gc_make_persistent_local(key);

ret = zend_hash_add_mem(&sg(known_post_content_types), key,

(void *) post_entry, sizeof(sapi_post_entry)) ? success : failure;

zend_string_release_ex(key, 1);

return ret;}

以上**其實就做了一件事,系統預設接受兩種post提交請求。

3. ini配置的輸入

if (sapi_module == &cli_sapi_module)  else 

ini_entries_len += sizeof(hardcoded_ini) - 2;

} sapi_module->ini_entries = ini_entries;

這裡是將硬編碼的幾個ini引數存入快取,其硬編碼引數如下

const char hardcoded_ini =

"html_errors=0\n"

"register_argc_ar**=1\n"

"implicit_flush=1\n"

"output_buffering=0\n"

"max_execution_time=0\n"

"max_input_time=-1\n\0";

4. 啟動模組

cli啟動時,使用的是cli_sapi_module物件,其內容如下

static sapi_module_struct cli_sapi_module = ;
其啟動函式是php_cli_startup

static int php_cli_startup(sapi_module_struct *sapi_module) /* 

return success;

}

最終呼叫php_module_startup

接下來將分多篇說明php_module_startup

Spring原始碼閱讀過程遇到的知識點整理

1.spring 類的例項化順序問題 如果希望乙個類中 bean注入的類在外部類初始化之前初始化可以用static修飾 2.bean例項化操作 beanfactorypostprocessor在bean例項化之前執行,之後例項化bean 呼叫建構函式,並呼叫set方法注入屬性值 然後在呼叫兩個初始化...

怎樣閱讀核心原始碼

1.獲取核心 2.目錄結構 在閱讀原始碼之前,還應知道linux核心原始碼的整體分布情況。現代的作業系統一般由程序管理 記憶體管理 文件系統 驅動程式和網路等組成。linux核心原始碼的各個目錄大致和此相對應,其組成如下 假設相對於linux 2.4.23目錄 arch目錄包括了任何和體系結構相關的...

PHP原始碼閱讀 number format函式

上次講到php是如何解析大整數的,一筆帶過了number format的處理,再詳細閱讀該函式的原始碼,以下是小分析。string number format float number int decimals 0 string number format float number int deci...