PHP生命週期

PHP的整個生命週期被劃分爲如下幾個階段:模塊初始化階段(module startup)、請求初始化階段(request startup)、執行腳本階段(executescript)、請求關閉階段(request shutdown)、模塊關閉階段(module shutdown)。根據不一樣SAPI的實現,各階段的執行狀況會有一些差別,好比命令行模式下,每次執行一個腳本都會完整地經歷這些階段,而FastCgi模式下則在啓動時執行一次模塊初始化,而後各個請求只經歷請求初始化、執行請求腳本、請求關閉幾個階段,在SAPI關閉時經歷模塊關閉階段。php

  • 模塊初始化階段函數

    • 激活SAPI
    • 啓動PHP輸出
    • 初始化垃圾回收器
    • 啓動Zend引擎spa

      • 啓動內存池
      • 設置一些util函數句柄
      • 設置Zend虛擬機編譯、執行器的函數句柄
      • 分配函數符號表、類符號表、常量符號表
    • 註冊Zend核心擴展
    • 註冊Zend定義的標準常量
    • 註冊$GLOBALS超全局變量的獲取handler
    • 分配php.ini配置的存儲符號表
    • 註冊PHP定義的常量
    • 解析php.ini
    • 映射PHP、Zend核心的php.ini配置
    • 註冊用於獲取 $_GET$_POST$_COOKIE$_SERVER$_ENV$_REQUEST$_FILES 變量的 handler
    • 註冊靜態編譯的擴展
    • 註冊動態加載的擴展
    • 回調各擴展定義的module starup鉤子函數
    • 註冊php.ini中禁用的函數、類
  • 請求初始化階段命令行

    • 激活輸出
    • 激活Zend引擎code

      • 重置垃圾回收器
      • 初始化編譯器
      • 初始化執行器
      • 初始化詞法掃描器
    • 激活SAPI
    • 回調各擴展定義的request startup鉤子函數
  • 執行腳本階段生命週期

    • 編譯階段ip

      • PHP 源代碼
      • 抽象語法樹
      • opline指令
    • 執行階段
  • 請求關閉階段內存

    • flush輸出內容
    • 發送HTTP應答header頭
    • 清理全局變量
    • 關閉編譯器
    • 關閉執行器
  • 模塊關閉階段資源

    • 進行資源的清理
    • PHP各模塊的關閉操做
    • 回調各擴展的module shutdown鉤子函數

image

相關文章
相關標籤/搜索