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服務
- 優缺點
- 安裝配置方便,不需要安裝程式碼解析程式
- 支援多執行緒,佔用資源少
- 支援大併發