成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PHP 之 FastCGI 與 mod_php 詳解

開(kāi)發(fā) 后端
網(wǎng)上對(duì)于FastCGI與mod_php的知識(shí)比較雜亂而不全面,故在此整理一下,以便入門(mén)學(xué)習(xí)者查閱方便。

網(wǎng)上對(duì)于FastCGI與mod_php的知識(shí)比較雜亂而不全面,故在此整理一下,以便入門(mén)學(xué)習(xí)者查閱方便。

背景

PHP最常用的方式是以模塊的方式(mod_php)運(yùn)行在Apache中,也是Apache運(yùn)行PHP的默認(rèn)方式;但在Nginx中,Nginx又使用的是PHP-FPM,但是PHP-FPM到底是個(gè)什么東東?跟php有什么關(guān)系?今天我們一起來(lái)探究一番。

PHP處理器(PHP handlers)

首先需要記住的是,任何一種Web服務(wù)器(Apache、Nginx等)都是被設(shè)計(jì)成向用戶(hù)發(fā)送html、圖片等靜態(tài)資源的,Web服務(wù)器自身并不能解釋任何動(dòng)態(tài)腳本(PHP、Python等)。

PHP處理器就是用來(lái)解釋W(xué)eb應(yīng)用中的PHP代碼,并將它解釋為HTML或其他靜態(tài)資源,然后將解析的結(jié)果傳給Web服務(wù)器,最后再由Web服務(wù)器發(fā)送給用戶(hù)。

大多數(shù)的Web服務(wù)器都不能解析PHP代碼,因此它需要一個(gè)能解析PHP代碼的程序,這就是PHP處理器。

現(xiàn)在我們知道了,Apache與Nginx都需要PHP處理器來(lái)處理php代碼,那么怎么連接上服務(wù)器與php處理器呢?也就是說(shuō)服務(wù)器與php處理器如何通信?

答案是通過(guò)SAPI(Server Application Programming Interface 服務(wù)器端應(yīng)用編程端口),簡(jiǎn)單來(lái)說(shuō),SAPI指的是PHP具體應(yīng)用的編程接口, 就像PC一樣,無(wú)論安裝哪些操作系統(tǒng),只要滿(mǎn)足了PC的接口規(guī)范都可以在PC上正常運(yùn)行, PHP腳本要執(zhí)行有很多種方式,通過(guò)Web服務(wù)器,或者直接在命令行下,也可以嵌入在其他程序中,有興趣大家可以研究PHP內(nèi)核。

我們這里繼續(xù)討論P(yáng)HP最常用的SAPI提供的2種連接方法:mod_php和mod_fastcgi。

mod_php模式

咱們回顧一下,Apache是怎么能夠識(shí)別php代碼的?是不是Apache的配置文件httpd.conf中加上或者修改這樣幾句:

  1. //添加

  2. LoadModule php5_module modules/libphp5.so

  3. AddType application/x-httpd-php .php

  4. //修改

  5. <IfModule dir_module>

  6. DirectoryIndex index.php index.html index.htm index.html

  7. </IfModule>

也即php作為Apache的一個(gè)子模塊來(lái)運(yùn)行,當(dāng)通過(guò)web訪問(wèn)php文件時(shí),Apache就會(huì)調(diào)用php5_module來(lái)解析php代碼。

配置加載mod_php模塊后,php便是Apahce進(jìn)程本身一部分,每個(gè)新的Apache子進(jìn)程都會(huì)加載此模塊。

mod_fastcgi模式

我們先看PHP-FPM官網(wǎng)的說(shuō)明:

PHP-FPM - A simple and robust FastCGI Process Manager for PHP
PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites.

PHP-FPM是一個(gè)PHP的FastCGI進(jìn)程管理器,解釋的非常簡(jiǎn)單。這說(shuō)明PHP-FPM是輔助mod_fastcgi模式進(jìn)行工作的,然而FastCGI又是個(gè)什么東西?管理著什么進(jìn)程?

什么是CGI?

CGI(Common Gateway Interface) 是WWW技術(shù)中最重要的技術(shù)之一,有著不可替代的重要地位。

CGI是外部應(yīng)用程序(CGI程序)與Web服務(wù)器之間的接口標(biāo)準(zhǔn),是在CGI程序和Web服務(wù)器之間傳遞信息的規(guī)程。

CGI規(guī)范允許Web服務(wù)器執(zhí)行外部程序,并將它們的輸出發(fā)送給Web瀏覽器,CGI將Web的一組簡(jiǎn)單的靜態(tài)超媒體文檔變成一個(gè)完整的新的交互式媒體。

說(shuō)白了,CGI是一種外部應(yīng)用程序(CGI程序)與Web服務(wù)器的協(xié)議,CGI是為了保證Server傳遞過(guò)來(lái)的數(shù)據(jù)是標(biāo)準(zhǔn)格式。

什么是FastCGI?

FastCGI像是一個(gè)常駐(long-live)型的CGI,它可以一直執(zhí)行著,只要激活后,不會(huì)每次都要花費(fèi)時(shí)間去fork一次(這是CGI最 為人詬病的fork-and-execute 模式)。它還支持分布式的運(yùn)算, 即 FastCGI 程序可以在網(wǎng)站服務(wù)器以外的主機(jī)上執(zhí)行并且接受來(lái)自其它網(wǎng)站服務(wù)器來(lái)的請(qǐng)求。

FastCGI是語(yǔ)言無(wú)關(guān)的、可伸縮架構(gòu)的CGI開(kāi)放擴(kuò)展,其主要行為是將CGI解釋器進(jìn)程保持在內(nèi)存中并因此獲得較高的性能。眾所周知,CGI解 釋器的反復(fù)加載是CGI性能低下的主要原因,如果CGI解釋器保持在內(nèi)存中并接受FastCGI進(jìn)程管理器調(diào)度,則可以提供良好的性能、伸縮性、 Fail- Over特性等等。

一般情況下,F(xiàn)astCGI的整個(gè)工作流程是這樣的:

  1. Web Server啟動(dòng)時(shí)載入FastCGI進(jìn)程管理器(IIS ISAPI或Apache Module)。

  2. FastCGI進(jìn)程管理器自身初始化,啟動(dòng)多個(gè)CGI解釋器進(jìn)程(可見(jiàn)多個(gè)php-cgi)并等待WebServer的連接。

  3. 當(dāng)客戶(hù)端請(qǐng)求到達(dá)Web Server時(shí),F(xiàn)astCGI進(jìn)程管理器選擇并連接到一個(gè)CGI解釋器。 Web server將CGI環(huán)境變量和標(biāo)準(zhǔn)輸入發(fā)送到FastCGI子進(jìn)程php-cgi。

  4. FastCGI子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息從同一連接返回Web Server。當(dāng)FastCGI子進(jìn)程關(guān)閉連接時(shí),請(qǐng)求便告處理完成,F(xiàn)astCGI子進(jìn)程接著等待并處理來(lái)自FastCGI進(jìn)程管理器(運(yùn)行在Web Server中)的下一個(gè)連接,在CGI模式中,php-cgi在此便已經(jīng)退出。

也就是說(shuō)FastCGI是CGI的升級(jí)版,一種語(yǔ)言無(wú)關(guān)的協(xié)議,用來(lái)溝通程序(如PHP, Python, Java)和Web服務(wù)器(Apache2, Nginx), 理論上任何語(yǔ)言編寫(xiě)的程序都可以通過(guò)FastCGI來(lái)提供Web服務(wù)。

FastCGI的特點(diǎn)是會(huì)在一個(gè)進(jìn)程中依次完成多個(gè)請(qǐng)求,以達(dá)到提高效率的目的,大多數(shù)FastCGI實(shí)現(xiàn)都會(huì)維護(hù)一個(gè)進(jìn)程池。

通俗解釋?zhuān)篎astCGI事先就需要啟動(dòng),而且可以啟動(dòng)多個(gè)CGI模塊,在那里一直運(yùn)行等著web發(fā)請(qǐng)求,然后再給php解析運(yùn)算,完成后生成html返回給web后,但是完成后它不會(huì)退出,而是繼續(xù)等著下一個(gè)web請(qǐng)求。

PHP-FPM

PHP-FPM就是針對(duì)于PHP的FastCGI的一種實(shí)現(xiàn),他負(fù)責(zé)管理一個(gè)進(jìn)程池,來(lái)處理來(lái)自Web服務(wù)器的請(qǐng)求。

但是PHP-FPM僅僅是個(gè)“PHP FastCGI 進(jìn)程管理器”, 它仍會(huì)調(diào)用PHP解釋器本身來(lái)處理請(qǐng)求,PHP解釋器(在Windows下)就是php-cgi.exe。

結(jié)束語(yǔ)

說(shuō)了這么多,也不知道是否表達(dá)清楚,如果有不正確的地方請(qǐng)指正,謝謝。

原文:http://article.gitos.cn/2015/Aurthur/PHP-Mod-PHP-And-Fast-CGI-Explain.html 作者: Aurthur

責(zé)任編輯:王雪燕 來(lái)源: Aurthur的博客
相關(guān)推薦

2017-07-19 16:58:53

PHPFastCGI 內(nèi)核探索

2017-12-28 10:22:28

NginxFastCGIPHP-fpm

2011-07-04 14:33:07

PHP

2011-07-04 14:57:56

PHP

2009-08-03 17:22:15

JSON解析

2016-10-27 15:58:35

魔術(shù)方法PHP

2009-06-30 09:50:10

IIS下配置PHPISAPIFastCGI

2011-07-05 17:52:41

PHP

2011-07-14 15:05:54

PHP

2011-07-12 17:06:43

PHP

2011-12-02 08:51:19

PHP

2013-05-20 10:20:02

2010-03-31 15:08:28

CentOS系統(tǒng)

2015-07-27 09:53:13

PHP編程過(guò)程

2016-12-21 10:35:55

PHP內(nèi)核PHP哈希表

2011-03-21 14:30:45

LAMPApachePHP

2011-07-05 17:45:07

PHP框架

2011-07-07 13:48:35

Smarty

2011-03-21 11:16:51

LAMPPHP

2017-01-10 13:37:15

PHPTrait應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人欧美一区二区三区色青冈 | a级在线免费观看 | 免费一级片 | 99久久99久久精品国产片果冰 | 美国一级片在线观看 | 久久久日韩精品一区二区三区 | 99re视频在线观看 | 欧美黄色片在线观看 | 一区二区三区四区免费在线观看 | 午夜在线精品偷拍 | av手机在线| 亚洲精品高清视频在线观看 | 亚洲精彩视频 | 成人性生交大免费 | 成人免费视频观看 | 一区二区三区日本 | 一区二区免费在线视频 | 国产人成在线观看 | 狠狠干天天干 | 国产一区日韩在线 | 欧美一二三区 | 欧美成人在线免费 | 91九色在线观看 | 成人福利影院 | 成人免费视频网站在线看 | 欧美色偷拍 | 能看的av| 伊人中文字幕 | 正在播放一区二区 | 99视频在线免费观看 | 国产日韩精品一区 | 男女国产网站 | 在线观看a视频 | 激情综合五月 | www.黄色在线观看 | 欧美性一区二区三区 | 99精品欧美一区二区三区 | 美女亚洲一区 | 国产午夜亚洲精品不卡 | 免费成人高清在线视频 | 在线观看国产视频 |