1. 程式人生 > >PHP執行模式

PHP執行模式

開發十年,就只剩下這套架構體系了! >>>   

php分為五大執行模式

  • cgi(通用閘道器介面 Common Gateway Interface)
  • fast-cgi(cgi升級版本)
  • cli(命令列模式 Command Line Interface)
  • isapi(Internet Server Application Program Interface,是微軟提供的一套面向Internet服務的API介面)
  • apache2handler(將php作為apache的模組)
  • 其他(continuity,embed,litespeed,milter等)

本地檢視執行模式的方法

phpinfo()
php -r "echo php_sapi_name()"

選擇執行模式前提

  • 瞭解執行模式優缺點和應用場景
  • 根據業務本身結合上一條

CLI模式

  • Command Line Interface的簡稱,支援windows和Linux平臺
  • 直接在命令列執行,不需要http server,例如php test.php
  • 應用場景
    • 定時任務
    • 開發桌面應用使用PHP-CLI和GTK包

CGI模式

  • Common Gateway Interface的簡稱,連線網頁和web伺服器執行程式,把http伺服器接受指令傳給執行程式,把執行程式的結果返回給http伺服器,支援跨平臺
  • 執行過程
    • http伺服器接收到使用者請求,如index.php,會通過它配置的cgi服務執行
    • 生成一個php-cgi程序,並執行php程式
    • 執行結果返回給http伺服器
  • 應用場景
    • 提供http服務
  • 優缺點
    • 跨平臺,幾乎能在任何作業系統實現
    • web和server是獨立的,結構清晰,可控性強
    • 效能比較差,每一個請求fork一個程序,消耗資源比較多(fork-and-execute模式)
    • 逐漸少見

FastCGI模式

  • 快速通用閘道器介面(Fast Common Gateway Interface)是CGI的增強版本,是一種讓互動程式和web伺服器通訊的協議,致力於減少web伺服器和CGI程式之間互動開銷,使伺服器可以同時處理更多的網頁請求
  • 執行過程
    • web伺服器啟動時載入Fast CGI程序管理器(php-fpm)
    • FastCGI程序管理器會啟動多個CGI程序等待web伺服器的連線
    • 當客戶端請求到達web伺服器時,FastCGI程序管理器選擇並連線到一個CGI直譯器。web伺服器把環境變數和標準輸入傳送到FastCGI子程序php-cgi
    • FastCGI子程序完成處理後將標準輸出和錯誤資訊從同一連線返回web伺服器。當FastCGI子程序關閉連線時,請求報告處理完成。FastCGI子程序接著等待並處理來自FastCGI程序管理器的下一個連線。在CGI模式中,php-cgi在此便退出了
  • 應用場景
    • 提供http服務
  • 優缺點
    • 跨平臺,幾乎能在任何作業系統實現
    • web和server是獨立的,結構清晰,可控性強
    • 支援大併發
    • 多程序,消耗較多記憶體

模組模式

  • 模組模式指把PHP作為web伺服器的一個模組執行
  • IIS的ISAPI和Apache的apache2handler

apache2handler

  • apache監聽一個使用者請求index.php
  • apache根據conf檔案配置的LoadModule php_module modules/mod_php5.so(windows下面是php5apache2_2.dll)呼叫PHP
  • 在mod_php5.so註冊一個php的鉤子php_ap2_register_hook
  • php_ap2_register_hook鉤子函式中包括4個掛鉤以及對應的函式ap_hook_pre_config,ap_hook_post_config,ap_hook_handler,ap_hook_child_init。其中pre_config,post_config,child_init是啟動掛鉤,在伺服器啟動時呼叫。handler時請求掛鉤,在伺服器處理請求時呼叫。其中post_config掛鉤中啟動php。
  • php執行完成後資料通過.so或dll返回給apache
  • apache將資料返回到客戶端
  • 應用場景
    • 提供http服務
  • 優缺點
    • 安裝配置方便,不需要安裝程式碼解析程式
    • 支援多執行緒,佔用資源少
    • 支援大併