PHP程式執行的過程原理

2022-08-24 02:12:12 字數 1946 閱讀 8125

為了以後能開發php擴充套件,就一定要了解php的執行順序。這篇文章就是為c開發php擴充套件做鋪墊。

web環境我們假設為apache。在編譯php的時候,為了能夠讓apache支援php,我們會生成乙個mod_php5.so的模組。apache載入這個模組,在url訪問.php檔案的時候,就會轉給mod_php5.so模組來處理。

apache啟動後會將mod_pho5.so模組的hook handler註冊進來,當apache檢測到訪問的url是乙個php檔案時,這時候就會把控制權交給sapi。進入到sapi後,首先會執行sapi/apache/mod_php5.c 檔案的php_init_handler函式,

這裡摘錄一段**:

static void php_init_handler(server_rec *s, pool *p)

#if module_magic_number >= 19980527

}#endif

}

該函式主要呼叫兩個函式:sapi_startup(&apache_sapi_module); php_apache_startup(&apache_sapi_module);

static int php_apache_startup(sapi_module_struct *sapi_module)

else

}

sapi_startup建立乙個 sapi_globals_struct結構體。sapi_globals_struct儲存了apache請求的基本資訊,如伺服器資訊,header,編碼等。sapi_startup執行完畢後再執行php_apache_startup。

static int php_apache_startup(sapi_module_struct *sapi_module)

else

}

php_module_startup 內容太多,這裡介紹一下大致的作用:

1. 初始化zend_utility_functions 結構.這個結構是設定zend的函式指標,比如錯誤處理函式,輸出函式,流操作函式等.

2. 設定環境變數.

3. 載入php.ini配置.

4. 載入php內建擴充套件.

5. 寫日誌.

6. 註冊php內部函式集.

7. 呼叫 php_ini_register_extensions,載入所有外部擴充套件

8. 開啟所有擴充套件

9. 一些清理操作.

重點說一下 3,4,7,8

載入php.ini配置

return failure;

}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

void php_ini_register_extensions(tsrmls_d)

該函式最後呼叫

dl_unload(handle);

return failure;

}將擴充套件資訊放到 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)

小程式執行執行過程原理 程式執行原理

計算機中包含有較多的硬體,但是乙個程式要執行,有三個核心的硬體,分別是 cpu 記憶體 硬碟 計算機中哪乙個硬體裝置負責執行程式?記憶體的速度快還是硬碟的速度快?我們的程式是安裝在記憶體中的,還是安裝在硬碟中的?我買了乙個記憶體條,有 500g 的空間!這句話對嗎?計算機關機之後,記憶體中的資料都會...

CPU執行程式的原理(簡化過程)

ram 指記憶體,斷電後內容無法儲存,因此叫做易失性儲存 另乙個相關的概念是rom,字面上是唯讀儲存器,從字面上裡面更適合用於嵌入式裝置,現在意義有所延伸,具體自行查詢資料。ram的速度遠快於rom,cpu與記憶體直接進行資料交換。cpu 計算機的所有計算操作都由它執行,只要先記住它是一塊有輸入和輸...

CPU執行程式的原理(簡化過程)

看了網上的一些描述cpu執行程式的過程,發現他們涉及到的內容太多了,恨不能把整個cpu的底層結構都拿出來說,這對計算機理論知識匱乏的新人甚至是一些老人都是非常不友好的。這個問題也是當初攔在我面前的乙隻大老虎,把這個原理寫出來也有助於我自己的深入理解。cpu 計算機的所有計算操作都由它執行,只要先記住...