下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第如何理解PHP程序執(zhí)行的過程原理目錄概述加載php.ini配置加載php內置擴展
概述
Web環(huán)境我們假設為Apache。在編譯PHP的時候,為了能夠讓Apache支持PHP,我們會生成一個mod_php5.so的模塊。Apache加載這個模塊,在url訪問.php文件的時候,就會轉給mod_php5.so模塊來處理。
這個就是我們常說的SAPI。英文名字是:ServerApplicationProgrammingInterface。SAPI其實是一個統(tǒng)稱,其下有ISAPI,CLISAPI,CGI等。有了它,就可以很容易的跟其他東西交互,比如APACHE,IIS,CGI等。
Apache啟動后會將mod_pho5.so模塊的hookhandler注冊進來,當Apache檢測到訪問的url是一個php文件時,這時候就會把控制權交給SAPI。進入到SAPI后,首先會執(zhí)行sapi/apache/mod_php5.c文件的php_init_handler函數,
這里摘錄一段代碼:
staticvoidphp_init_handler(server_rec*s,pool*p)
register_cleanup(p,NULL,(void(*)(void*))apache_php_module_shutdown_wrapper,(void(*)(void*))php_module_shutdown_for_exec);
if(!apache_php_initialized){
apache_php_initialized=1;
#ifdefZTS
tsrm_startup(1,1,0,NULL);
#endif
sapi_startup(apache_sapi_module);
php_apache_startup(apache_sapi_module);
#ifMODULE_MAGIC_NUMBER=19980527
TSRMLS_FETCH();
if(PG(expose_php)){
ap_add_version_component("PHP/"PHP_VERSION);
#endif
}
該函數主要調用兩個函數:sapi_startup(apache_sapi_module);php_apache_startup(apache_sapi_module);
staticintphp_apache_startup(sapi_module_struct*sapi_module)
if(php_module_startup(sapi_module,apache_module_entry,1)==FAILURE){
returnFAILURE;
}else{
returnSUCCESS;
}
sapi_startup創(chuàng)建一個sapi_globals_struct結構體。sapi_globals_struct保存了Apache請求的基本信息,如服務器信息,Header,編碼等。sapi_startup執(zhí)行完畢后再執(zhí)行php_apache_startup。
staticintphp_apache_startup(sapi_module_struct*sapi_module)
if(php_module_startup(sapi_module,apache_module_entry,1)==FAILURE){
returnFAILURE;
}else{
returnSUCCESS;
}
php_module_startup內容太多,這里介紹一下大致的作用:
1.初始化zend_utility_functions結構.這個結構是設置zend的函數指針,比如錯誤處理函數,輸出函數,流操作函數等.
2.設置環(huán)境變量.
3.加載php.ini配置.
4.加載php內置擴展.
5.寫日志.
6.注冊php內部函數集.
7.調用php_ini_register_extensions,加載所有外部擴展
8.開啟所有擴展
9.一些清理操作.
重點說一下3,4,7,8
加載php.ini配置
if(php_init_config(TSRMLS_C)==FAILURE){
returnFAILURE;
}
php_init_config函數會在這里檢查所有php.ini配置,并且找到所有加載的模塊,添加到php_extension_lists結構中。
加載php內置擴展
調用zend_register_standard_ini_entries加載所有php的內置擴展,如array,mysql等。
調用php_ini_register_extensions,加載所有外部擴展
main/php_ini.c
voidphp_ini_register_extensions(TSRMLS_D)
zend_llist_apply(extension_lists.engine,php_load_zend_extension_cbTSRMLS_CC);
zend_llist_apply(extension_lists.functions,php_load_php_extension_cbTSRMLS_CC);
zend_llist_destroy(extension_lists.engine);
zend_llist_destroy(extension_lists.functions);
}
zend_llist_apply函數遍歷extension_lists執(zhí)行回調函數php_load_php_extension_cb
staticvoidphp_load_zend_extension_cb(void*argTSRMLS_DC)
zend_load_extension(*((char**)arg));
}
該函數最后調用
if((module_entry=zend_register_module_ex(module_entryTSRMLS_CC))==NULL){
DL_UNLOAD(handle);
returnFAILURE;
}
將擴展信息放到Hash表module_registry中,Zend/zend_API.c
if(zend_hash_add(module_registry,lcname,name_len+1,(void*)module,sizeof(zend_module_entry),(void**)module_ptr)==FAILURE){
zend_error(E_CORE_WARNING,"Module\'%s'alreadyloaded",module-name);
efree(lcname);
returnNULL;
}
最后,zend_startup_modules(TSRMLS_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 光刻技術原理
- 2025年高職地圖數據圖例轉換技術(圖例轉換實操)試題及答案
- 2025年中職設備維護管理(管理技術)試題及答案
- 2025年中職服裝與服飾設計(服飾教學實操)試題及答案
- 2025年高職房地產經營與管理(房地產經營與管理基礎)試題及答案
- 2025年高職人力資源管理(招聘與配置)試題及答案
- 2025年高職河運海事管理(海事管理基礎)試題及答案
- 2025年中職電子技術應用(電子電路基礎)試題及答案
- 2025年大學環(huán)境科學(水污染控制實驗)試題及答案
- 2025年中職第二學年(老年護理方向)照護實務階段測試題及答案
- 章節(jié)復習:平行四邊形(5個知識點+12大常考題型)解析版-2024-2025學年八年級數學下冊(北師大版)
- 《實踐論》《矛盾論》導讀課件
- 中試基地運營管理制度
- 老年病康復訓練治療講課件
- DB4201-T 617-2020 武漢市架空管線容貌管理技術規(guī)范
- 藥品追溯碼管理制度
- 腳手架國際化標準下的發(fā)展趨勢
- 購銷合同范本(塘渣)8篇
- 生鮮業(yè)務采購合同協議
- GB/T 4340.2-2025金屬材料維氏硬度試驗第2部分:硬度計的檢驗與校準
- 銷售合同評審管理制度
評論
0/150
提交評論