av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

關(guān)于PHP運行模式的詳細總結(jié)

SAPI

這里所說的 php 運行模式, 其實指的是 SAPI (server Application Programming Interface,服務(wù)端應(yīng)用編程端口 )。SAPI 為 PHP 提供了一個和外部通信的接口, PHP 就是通過這個接口來與其它的應(yīng)用進行數(shù)據(jù)交互的。針對不同的應(yīng)用場景, PHP 也提供了多種不同的 SAPI ,常見的有:apache、apache2filter、apache2handler、cli、cgi、embed 、fast-cgi、isapi 等等。

創(chuàng)新互聯(lián)長期為上1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為澄江企業(yè)提供專業(yè)的網(wǎng)站制作、成都網(wǎng)站制作,澄江網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

目前 PHP 內(nèi)置的很多 SAPI 實現(xiàn)都已不再維護或者變的有些非主流了,PHP 社區(qū)目前正在考慮將一些 SAPI 移出代碼庫。 社區(qū)對很多功能的考慮是除非真的非常必要,或者某些功能已近非常通用了,否則就在 PECL 庫中。

接下來會對其中五個比較常見的運行模式進行說明。

CLI 模式

CLI( Command Line Interface ), 也就是命令行接口,PHP 默認會安裝。通過這個接口,可以在 shell 環(huán)境下與 PHP 進行交互 。在終端里輸入 php -v,會得到類似下圖的結(jié)果(安裝了 PHP 前提下):

因為有 CLI 的存在,我們可以直接在終端命令行里運行 PHP 腳本,就像使用 shell、Python 那樣,不用依賴于 WEB 服務(wù)器。比如 Laravel 框架中的 Artisan 命令行工具,它其實就是一個 PHP 腳本,用來幫助我們快速構(gòu)建 Laravel 應(yīng)用的。

CGI 模式

WEB 服務(wù)器只是內(nèi)容的分發(fā)者。比如 Nginx,如果客戶端請求了 /index.html,那么 Nginx 會去文件系統(tǒng)中找到這個文件,發(fā)送給瀏覽器,這里分發(fā)的是靜態(tài)數(shù)據(jù);如果客戶端現(xiàn)在請求的是 /index.php,根據(jù)配置文件,Nginx 知道這個不是靜態(tài)文件,需要去找 PHP 解析器來處理,那么它會把這個請求經(jīng)過簡單處理后交給PHP 解析器。Nginx 會傳哪些數(shù)據(jù)給 PHP 解析器呢?url 要有吧,查詢字符串也得有吧,POST 數(shù)據(jù)也要有,HTTP 請求頭 不能少吧,好的,CGI 就是規(guī)定要傳哪些數(shù)據(jù)、以什么樣的格式傳遞給后方處理這個請求的協(xié)議。

CGI 模式運行原理:當(dāng) Nginx 收到瀏覽器 /index.php 這個請求后,首先會創(chuàng)建一個對應(yīng)實現(xiàn)了 CGI 協(xié)議的進程,這里就是 php-cgi(PHP 解析器)。接下來 php-cgi 會解析 php.ini 文件,初始化執(zhí)行環(huán)境,然后處理請求,再以 CGI 規(guī)定的格式返回處理后的結(jié)果,退出進程。最后,Nginx 再把結(jié)果返回給瀏覽器。整個流程就是一個 Fork-And-Execute 模式。當(dāng)用戶請求數(shù)量非常多時,會大量擠占系統(tǒng)的資源如內(nèi)存、CPU 時間等,造成效能低下。所以在用 CGI 方式的服務(wù)器下,有多少個連接請求就會有多少個 CGI 子進程,子進程反復(fù)加載是 CGI 性能低下的主要原因。

CGI 模式的好處就是完全獨立于任何服務(wù)器,僅僅是做為一個中介:提供接口給 WEB 服務(wù)器和腳本語言或者是完全獨立編程語言。它們通過 CGI 協(xié)議搭線來完成數(shù)據(jù)傳遞。這樣做的好處了盡量減少它們之間的關(guān)聯(lián),使得各自更加獨立、互不影響。

CGI 模式已經(jīng)是比較古老的模式了,這幾年都很少用了。

FastCGI 模式

根據(jù)定義可以知道,F(xiàn)astCGI 也是一種協(xié)議,實現(xiàn)了 FastCGI 協(xié)議的程序,更像是一個常駐型(long-live)的 CGI 協(xié)議程序,只要激活后,它可以一直執(zhí)行著,不會每次都要花費時間去 fork 一次。

FastCGI 模式運行原理:FastCGI 進程管理器啟動之后,首先會解析 php.ini 文件,初始化執(zhí)行環(huán)境,然后會啟動多個 CGI 協(xié)議解釋器守護進程 (進程管理中可以看到多個 php-cig 或 php-cgi.exe),并等待來自 WEB 服務(wù)器的連接;當(dāng)客戶端請求到達 WEB 服務(wù)器時,F(xiàn)astCGI 進程管理器會選擇并連接到一個 CGI 解釋器, WEB 服務(wù)器將 CGI環(huán)境變量和標準輸入發(fā)送到 FastCGI 的子進程 php-cgi 中; php-cgi 子進程完成處理后便將標準輸出和錯誤信息返回給 WEB 服務(wù)器;此時 php-cgi 子進程就會關(guān)閉連接,該請求便處理結(jié)束,接著繼續(xù)等待并處理來自 FastCGI 進程管理器的下一個請求連接。

FastCGI 模式采用了 C/S 結(jié)構(gòu),可以將 WEB 服務(wù)器和腳本解析服務(wù)器分開,同時在腳本解析服務(wù)器上啟動一個或者多個腳本解析守護進程。當(dāng) WEB 服務(wù)器每次遇到動態(tài)程序時,可以將其直接交付給 FastCGI 進程來執(zhí)行,然后將得到的結(jié)果返回給瀏覽器。這種方式可以讓 WEB 服務(wù)器專一地處理靜態(tài)請求或者將動態(tài)腳本服務(wù)器的結(jié)果返回給客戶端,這在很大程度上提高了整個應(yīng)用系統(tǒng)的性能。

另外,在 CGI 模式下,php-cgi 在 php.ini 配置變更后,需要重啟 php-cgi 進程才能讓新的 php-ini 配置生效,不可以平滑重啟。而在 FastCGI 模式下,PHP-FPM 可以通過生成新的子進程來實現(xiàn) php.ini 修改后的平滑重啟。

FastCGI 模式的優(yōu)點:

  • 從穩(wěn)定性上看,F(xiàn)astCGI 模式是以獨立的進程池來運行 CGI 協(xié)議程序,單獨一個進程死掉,系統(tǒng)可以很輕易的丟棄,然后重新分配新的進程來運行邏輯;

  • 從安全性上看,F(xiàn)astCGI 模式支持分布式運算。FastCGI 程序和宿主的 Server 完全獨立,F(xiàn)astCGI 程序掛了也不影響 Server;

  • 從性能上看,F(xiàn)astCGI 模式把動態(tài)邏輯的處理從 Server 中分離出來,大負荷的 IO 處理還是留給宿主 Server,這樣宿主 Server 可以一心一意處理 IO,對于一個普通的動態(tài)網(wǎng)頁來說, 邏輯處理可能只有一小部分,大量的是圖片等靜態(tài)。

FastCGI 模式是目前 PHP 主流的 WEB 服務(wù)運行模式,擁有高效可靠的性能,推薦大家使用。

Module 模式

PHP 常常與 Apache 服務(wù)器搭配形成 LAMP 配套的運行環(huán)境。把 PHP 作為一個子模塊集成到 Apache 中,就是 Module 模式,Apache 中的常見配置如下:

LoadModule php5_module modules/mod_php5.so

這使用了 LoadModule 命令,該命令的第一個參數(shù)是模塊的名稱,名稱可以在模塊實現(xiàn)的源碼中找到。第二個選項是該模塊所處的路徑。如果需要在服務(wù)器運行時加載模塊,可以通過發(fā)送信號 HUP 或者 AP_SIG_GRACEFUL 給服務(wù)器,一旦接受到該信號,Apache 將重新裝載模塊,而不需要重新啟動服務(wù)器。通過注冊到 apache2 的 ap_hook_post_config 掛鉤,在 Apache 啟動的時候啟動此模塊以接受 PHP 文件的請求。

例如,當(dāng)客戶端訪問 PHP 文件時,Apache 就會調(diào)用 php5_module 來解析 PHP 腳本。Apache 每接收到一個請求,都會產(chǎn)生一個進程來連接 PHP 完成請求。在 Module 模式下,有時候會因為把 PHP 作為模塊編進 Apache,而導(dǎo)致出現(xiàn)問題時很難定位是 PHP 的問題還是 Apache 的問題。

ISAPI 模式

ISAPI(Internet Server Application Program Interface)是微軟提供的一套面向 Internet 服務(wù)的 API 接口,一個 ISAPI 的 DLL,可以在被用戶請求激活后長駐內(nèi)存,等待用戶的另一個請求,還可以在一個 DLL 里設(shè)置多個用戶請求處理函數(shù),此外,ISAPI 的 DLL 應(yīng)用程序和 WEB 服務(wù)器處于同一個進程中,效率要顯著高于 CGI。由于微軟的排他性,只能運行于 Windows 環(huán)境。

用的比較少,在這里就不做詳細介紹了。


本文題目:關(guān)于PHP運行模式的詳細總結(jié)
文章來源:http://uogjgqi.cn/article/coisggc.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流