PHP 運行模式與運行原理

目前常見的4種PHP運行模式

  1. CGI通用網關接口模式
  2. FAST-CGI模式
  3. CLI命令行模式
  4. 模塊模式

運行模式

CGI通用網關接口模式

每有一個用戶請求,都會先要建立cgi的子進程,而後處理請求,處理完後結束這個子進程php

cgi是一種爲了保證web server傳遞過來的數據是標準格式的通用網關接口協議nginx

比較老,比較原始,大多已經不用了web

FAST-CGI模式

是cgi的升級版本,FastCGI 像是一個常駐 (long-live) 型的 CGI,它能夠一直執行着,只要激活後,不會每次都要花費時間去fork 一次,也是一種協議數據庫

FastCGI的工做原理是:服務器

  (1)、Web Server啓動時載入FastCGI進程管理器【PHP的FastCGI進程管理器是PHP-FPM(php-FastCGI Process Manager)】(IIS ISAPI或Apache Module);數據結構

  (2)、FastCGI進程管理器自身初始化,啓動多個CGI解釋器進程 (在任務管理器中可見多個php-cgi.exe)並等待來自Web Server的鏈接。less

  (3)、當客戶端請求到達Web Server時,FastCGI進程管理器選擇並鏈接到一個CGI解釋器。Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi。php-fpm

  (4)、FastCGI子進程完成處理後將標準輸出和錯誤信息從同一鏈接返回Web Server。當FastCGI子進程關閉鏈接時,請求便告處理完成。FastCGI子進程接着等待並處理來自FastCGI進程管理器(運行在 WebServer中)的下一個鏈接。在正常的CGI模式中,php-cgi.exe在此便退出了。spa

  在CGI模式中,能夠想象 CGI一般有多慢。每個Web請求PHP都必須從新解析php.ini、從新載入所有dll擴展並重初始化所有數據結構。使用FastCGI,全部這些都只在進程啓動時發生一次。一個額外的好處是,持續數據庫鏈接(Persistent database connection)能夠工做。命令行

CLI命令行模式

通常使用調用腳本、查看php信息時會使用到該模式

php -r"phpinfo();" |less 分頁顯示

模塊模式

  1. Apache + mod_php
  2. lighttp + spawn-fcgi
  3. nginx + PHP-FPM

運行原理

PHP-CGI:fast-cgi是一種協議,而php-cgi是實現了這種協議的進程。不過這種實現比較爛。它是單進程的,一個進程處理一個請求,處理結束後進程就銷燬

PHP - FPM:是對php-cgi的改進版,它直接管理多個php-cgi進程/線程。也就是說,php-fpm是php-cgi的進程管理器所以它也算是fastcgi協議的實現
php的運行原理,就是在服務器啓動時,自動載入PHP-FPM進程管理器,從而管理多個PHP-CGI進程來準備響應用戶的請求,以下圖所示:

clipboard.png

clipboard.png

因爲php-cgi是隨服務器啓動載入的,因此初始化變量只會發生一次

運行模式和運行原理的區別

多個運行模式至關於超市的不一樣入口,運行原理就是進入超市後的固定的行走路線,經過不一樣的運行模式進入到底層(進入超市)

相關文章
相關標籤/搜索