淺析 php 的幾種運行方式

淺析 php 的幾種運行方式

  • php
  • CGI
  • FAST-CGI
  • PHP-FPM
  • CLI

php 的幾種運行方式

  1. CGI
  2. FAST-CGI
  3. Web-module
  4. CLI

CGI

CGI (Common Gateway Interface) 是通用網關型接口,CGI是外部應用程序(CGI程序)與Web服務器之間的接口標準,是在CGI程序和Web服務器之間傳遞信息的過程。簡單的說,就是當你的 php引擎和web服務器相互傳遞消息時,CGI 規定了一套標準來規範如何傳遞數據以及數據傳遞的格式。

當 web 服務器接收到一個請求時,就會啓動一個 CGI 進程,這裏就會通知到PHP 引擎,然後去解析 php.ini 文件,開始處理請求,並且將處理的請求的結果以標準的格式返回給 web 服務器,並退出進程。

Created with Raphaël 2.1.0CGI工作原理瀏覽器瀏覽器web服務器web服務器CGI應用程序(php引擎)CGI應用程序(php引擎)發送請求啓動一個 CGI 進程發送解析好的信息發送 html 信息

顯而易見的是,這樣每一個請求過來的話都會重新去啓動一個 CGI 進程,關鍵是每個進程又都會去啓動引擎去解析 php.ini 文件,這樣當請求多的時候,效率會非常的低。因而,已經逐漸被拋棄。

注意:需要明確的是 CGI 只是一套接口標準,具體的實現程序纔是用來啓動進程的。比如根據 CGI 實現的 php-cgi 程序。

FAST-CGI

既然 CGI 是如此的效率低下,聰明的人類肯定能夠想出更好的方法來使得 CGI 更加高效,對的,這就是 FAST-CGI。

FAST-CGI 也是一種通用網關型接口,是建立在 CGI 的基礎上進化而來,FastCGI 像是一個常駐(long-live)型的 CGI,它可以一直執行着,只要激活後,不會每次都要花費時間去fork一次(這是CGI最爲人詬病的fork-and-execute 模式)。它還支持分佈式的運算, 即 FastCGI 程序可以在網站服務器以外的主機上執行並且接受來自其它網站服務器來的請求。
簡單理解呢,大概是這樣:當web服務器啓動時,會載入Fast-CGI 進程管理器,FastCGI進程管理器會同時開啓多個 CGI 子進程,相當於一個進程池,當 web 請求到來時,會選擇一個 CGI 解釋器並連接,處理完成後將信息返回給web服務器,這時候,該子進程又會回到進程管理器中繼續等待下一個連接,所以這樣不需要每次都去重新啓動進程,加載配置文件。

Created with Raphaël 2.1.0fast-cgi 工作原理web服務器web服務器fastcgi進程管理fastcgi進程管理cgi子進程cgi子進程啓動載入啓動多個請求連接一個返回解析並重新等待新的請求

php-cgi 只是用來處理 cgi 進程的程序,那 php fast-cgi 進程管理器是怎麼實現的呢,php-fpm ,對的,就是它,php-fmp 用來管理和調度這些 php fast-cgi 進程。

注意:還是需要明確一下,fast-cgi 也只是一套協議標準,php fast-cgi纔是具體的實現程序,php-fpm是實現了對 fast-cgi 的進程管理。

Web-module

這個簡稱爲 web 模塊加載模式,想必用 apache 搭建過 php 環境的應該都瞭解,apahce 需要加載 mod-php5 模塊,這個模塊就是用來將 Apache 傳遞過來的 php 文件的請求,並處理這些請求,最終將處理的結果返回給 apache。在 apache 的配置文件中配置好了 php 模塊,php 模塊就會通過註冊 apache2 的 ap_hook_post_config 掛鉤,實現請求與返回。

windows 下:

LoadModule php5_module d:/server/php/php5apache2_2.dll

linux 下:

LoadModule php5_module modules/mod_php5.so

 該模塊是 apache 在CGI的基礎上進行的一種擴展,加快PHP的運行效率

CLI

php-CLI:PHP Command Line Interface

即 php 在命令行運行的接口,當然是相對於以上三種方式(web 請求)來說的

優點:

  • 多進程池,子進程完成後,內核會回收掉
  • 主進程只進行任務分發

CLI 模式在 windows 和 linux 都可以運行。

以上就是 php 的幾種主要的運行方式,除此之外,還有一種運行方式是 ISAPI(Internet Server Application Program Interface)是微軟提供的一套面向Internet服務的API接口,在這裏就不多介紹了。因爲現在幾乎都是在 Linux 下部署 php 應用了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章