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