天天看點

一張遊覽PHP核心迷宮的藏寶圖

PHP核心就像一個迷宮,如果沒有一個縱覽全局的圖,隻是面對其中的一個點,就會像進了迷宮一樣,走着走着就走到了死胡同。在這個迷宮裡轉悠了很久之後,最近得到了一張PHP藏寶圖,然後看着這張圖去遊覽PHP核心,頓時覺得這個景區的面貌清晰了許多。廢話不說了,上圖:

這張圖包括兩部分,分别對應PHP的啟動過程,和PHP處理每個請求的過程。PHP的啟動過程是一系列的初始化操作,建立處理請求時使用的各種全局變量:

Apache啟動 

 => sapi_startup

 => php_module_startup (PHP的主開關)

 => php_output_startup

 => zend_startup (啟動Zend引擎)

 => register_ini_entries

 => php_ini_stream_wrappers

 => php_ini_register_extensions (啟動動态加載的擴充)

 => zend_startup_modules 

 => zend_startup_extensions

下面是處理每個請求時的流程:

php_handler

 => php_apche_request_ctor

 => zend_activate

 => zend_execute_scripts

 => zend_compile (文法分析、語義分析、生成oparray)

 => zend_execute (執行opcode)

 => zend_deactivate

程序退出時關掉zend、php:

sapi_shutdown

=> zend_shutdown