前四種是提供給web伺服器來處理php**檔案,其中模組載入的方式其實是最快的的,但fastcgi配合nginx web服務是目前的主流,下面主要配合apache做說明。
以模組載入的方式執行,其實就是將php整合到web伺服器,以同乙個程序執行。
此執行模式在使用apache伺服器經常使用,通重載入模組(linux so,window dll)中,php是與web伺服器(apache)一起啟動並執行的,是apache在cgi的基礎上進行的一種擴充套件,加快php的執行效率。
以linux為例編譯php,在./configure步驟需要指定--with-apxs2=/path/to/apache/bin/apxs表示告訴編譯器通過apache的mod_php5/apxs來提供對php5的解析。
在make install的時候我們會看到將動態鏈結庫libphp5.so(apache模組)拷貝到apache2的安裝目錄的modules目錄下(編譯apache 時要帶--enable-modules=so,不實際編譯模組但允許載入模組),然後在httpd.conf配置檔案中新增loadmodule語句來動態將libphp5.so 模組載入進來,從而實現apache對php的支援。
directoryindex index.html index.php
php作為apache模組,apache伺服器在系統啟動後,預先生成多個程序副本駐留在記憶體中,一旦有請求出現,就立即使用這些空餘的子程序進行處理,這樣就不存在生成子程序造成的延遲了。這些伺服器副本在處理完一次http請求之後並不立即退出,而是停留在計算機中等待下次請求。對於客戶瀏覽器的請求反應更快,效能較高。
cgi即通用閘道器介面(common gateway inte***ce),它是一段程式,通俗的講cgi就象是一座橋,把網頁和web伺服器中的執行程式連線起來,它把html接收的指令傳遞給伺服器的執行程式,再把伺服器執行程式的結果返還給html頁。cgi 的跨平台效能極佳,幾乎可以在任何作業系統上實現。
cgi方式在遇到連線請求(使用者 請求)先要建立cgi的子程序,啟用乙個cgi程序,然後處理請求,處理完後結束這個子程序。這就是fork-and-execute模式。所以用cgi方式的伺服器有多少連線請求就會有多少cgi子程序,子程序反覆載入是cgi效能低下的主要原因。都會當使用者請求數量非常多時,會大量擠占系統的資源如內 存,cpu時間等,造成效能低下。
修改php配置php.ini
cgi.force_redirect = 0 //本來是 1 並且去掉注釋符號;
修改apache的配置,去掉原來的模組配置
loadmodule php5_module "c:/php5/php5apache2_2.dll"
phpinidir "c:/php5/php.ini"
加入以下配置
addhandler cgi-script
#!/path/to/php/php-cgi(.exe) <? php php phpinfo(); ?>
在上述情況中,你可以想象cgi通常有多慢。每乙個web請求php都必須重新解析php.ini、重新載入全部擴充套件並重初始化全部資料結構。
fast-cgi 是cgi的公升級版本,fastcgi像是乙個常駐(long-live)型的cgi,它可以一直執行著,只要啟用後,不會每次都要花費時間去fork一 次。php使用php-fpm(fastcgi process manager),全稱php fastcgi程序管理器進行管理。
php 5.3.29之後自帶fpm,編譯時帶--enable-fpm,之前需另外載入模組。
loadmodule fcgid_module modules/mod_fcgid.so // line 128追加
fcgidinitialenv phprc "c:/php5" //php配置檔案 line 129追加 addhandler
"c:/php5/php-cgi.exe" .php //直譯器路徑 line 408 options indexes
followsymlinks execcgi //line 221 追加 execcgi 意思是目錄允許執行cgi指令碼
使用fastcgi,所有這些都只在程序啟動時發生一次。乙個額外的 好處是,持續資料庫連線(persistent database connection)可以工作。
cli是php的命令列執行模式,大家經常會使用它,但是可能並沒有注意到(例如:我們在linux下經常使用 「php -m」查詢php安裝了那些擴充套件就是php命令列執行模式;有興趣的同學可以輸入php -h去深入研究該執行模式)
PHP的幾種執行模式
php一共分為五大執行模式 包括cgi fast cgi cli isapi apache 模組的 dll cgicgi即通用閘道器介面 common gateway inte ce 它是一段程式,通俗的講cgi就象是一座橋,把網頁和web伺服器中的執行程式連線起來,它把html接收的指令傳遞給伺服...
php 幾種排序方式
1.氣泡排序 function m sort arr l count arr if l 0 return false for i 0 i l 1 i for j i 1 j l 1 j if arr i arr j temp arr i arr i arr j arr j temp return a...
erlang程式執行的幾種方式
1.在erlang shell中編譯執行 1 module hello 2 export start 0 34 start 5 io format hello world n view source print?erl erlang r14b03 erts 5.8.4 source smp 2 2 ...