php有三種工作模式

2021-09-08 04:08:22 字數 3559 閱讀 1937

php有三種工作模式. 其中是最常見的是php作為乙個模組工作在乙個多程序的webserver中, 例如apache webserver. apache會啟動乙個主程序, 多個子程序(php). 主程序分發請求到子程序上處理. 目前流行的nginx + php-fpm應該也是類似這一種模式, ngnix會把請求**給php-fpm處理. php-fpm是乙個php程序管理器, 維護了乙個php程序池, 在接收到請求後分發給php子程序.

在這種模式下, php程序可以是一直存活的. 程序啟動時會做程序相關的初始化操作, 比如載入外掛程式. 對於接收到的請求, 會做請求處理的相關初始化->呼叫相應的php**做業務操作->銷毀請求上下文. 對於php程式設計師來講, 每個請求的處理都是全新的上下文, 所有定義/物件/變數完全限定在單個請求處理的這個上下文中. 大家寫的php**到此結束. 當然, php程序也可以被銷毀, 這與php-fpm的工作模式有關. 更多細節詳見相關文件1+2.

因此, 對於乙個這樣的php程序, 是可以做持久化資料庫連線的, 只是稍有不同. 每個php程序只保留乙個持久連線. 例如, php-fpm啟動了20個php子程序, 對於同乙個資料庫和同乙個使用者名稱, 最多有20個持久連線. 對於同乙個php程序所處理的多個請求, 它們都使用同乙個資料庫連線. 更多詳見文件3.

所以, 這個效果與使用乙個連線池也差不多了. 持久連線數取決與php程序的數量. 最終, 持久連線數量/程序數量就需要按實際的情況來調優了.

目前理解是這樣, 如有誤請指正.

相關文件:

1. php生命週期

2. php-fpm配置文件:

3. php持久化連線:

php執行目前為止主要有三種方式: 

a、以模組載入的方式執行,初學者可能不容易理解,其實就是將php整合到apache伺服器,以同乙個程序執行。 

b、以cgi的方式執行,cgi英文叫做公共閘道器介面,就是apache在遇到php指令碼的時候會將php程式提交給cgi應用程式(php-cgi.exe)解釋,解釋之後的結果返回給apache,然後再相應請求的使用者。 

c、以fastcgi的方式執行。這種形式是cgi的加強版本,cgi是單程序,多執行緒的執行方式,程式執行完成之後就會銷毀,所以每次都需要載入配置和環境變數fork-and-execute(建立-執行)。而fastcgi則不同,fastcgi 像是乙個常駐 (long-live) 型的 cgi,它可以一直執行著,只要啟用後,不會每次都要花費時間去 fork 一次。fastcgi程序管理器自身初始化,啟動多個cgi直譯器程序 (在任務管理器中可見多個php-cgi.exe)並等待來自web server的連線。下面我就分邊配置這三種執行方式: 

1、無論上述哪種方式執行下面的配置通常都會加上,解壓php安裝包到c:/php5/,重新命名php.ini-recommend檔案為php.ini,分別尋找如下字段編輯,去除前面的分號(注意不要去錯分號,好多是注釋資訊,仔細辨認)。 

複製****如下:

error_reporting = e_all //開啟報錯,便於程式設計師查錯 line 342 

display_errors = on //顯示錯誤 line 373 

extension_dir = "c:/php5/ext" //php的擴充套件選項檔案所在的目錄 line 542 

date.timezone = asia/shanhai //時區配置  line 716 

2、以模組的方式執行,在apache(c:/program files/apache software foundation/apache2.2/conf)的配置檔案裡新增如下配置 

複製****如下:

loadmodule php5_module "c:/php5/php5apache2_2.dll" //大約line 127 

phpinidir "c:/php5/php.ini" 

//修改配置 

directoryindex index.html index.php//追加index.php 

接著我們在apache的根目錄下面,預設c:/program files/apache software foundation/apache2.2/htdocs新建php檔案index.php,編輯新增如下**: 

複製****如下:

3、cgi的方式執行,需要做如下的配置首先php配置檔案 

複製****如下:

cgi.force_redirect = 0 //本來是 1 並且去掉注釋符號; 

修改apache的配置,去掉原來的模組配置 

複製****如下:

loadmodule php5_module "c:/php5/php5apache2_2.dll" 

phpinidir "c:/php5/php.ini" 

=>加入以下配置 

複製****如下:

addhandler cgi-script .cgi // line 396 

然後我們在目錄c:/program files/apache software foundation/apache2.2/cgi-bin新建乙個cgi檔案test.cgi編寫如下**: 

複製****如下:

如果同時開啟多個則會有很多php-cgi.exe,並且在執行完成之後消失:

複製****如下:

loadmodule fcgid_module modules/mod_fcgid.so // line 128追加 

fcgidinitialenv phprc "c:/php5" //php配置檔案 line 129追加 

addhandler fcgid-script .php //新增控制代碼 即字尾 什麼樣的檔案需要fastcgi解釋 line 407追加 

options indexes followsymlinks execcgi //line 221 追加 execcgi 意思是目錄允許執行cgi指令碼 

是否成功安裝,只需要做個php檔案檢查就可以了,我們就用上面的index.php檔案: 

終於把php的執行方式講完了,初學者一定要親自試驗一下,這篇教程具有一定的難度,要反覆思考才能理解其中的意思,涉及到一些專業知識,當然你暫時可以直接使用模組執行方式,等自己對php有了一定的理解之後可以再回頭看看這篇文章,今天我花了幾個小時的時間整理php的執行方式,由於作者本人的水平有限,錯誤之處在所難免!

VMWare的三種工作模式

1 bridged 橋接模式 這種模式下虛擬系統就相當於區域網中的一台主機,它和宿主機器是完全對等的。需要手動為虛擬系統配置ip位址 子網掩碼,並且要和宿主機器處於同乙個網段,這樣才可以通過區域網的 閘道器或路由器訪問網際網路。2 host only 主機模式 這種模式正如它的名字所示,虛擬系統不能...

snort三種工作模式詳解

snort有三種工作方式 嗅探器,資料報記錄器和網路入侵檢測系統.嗅探器 輸入命令 snort v 即可把tcp ip包頭資訊列印在螢幕上,為了方便檢視,可以把結果輸出到檔案中,詳情請見檔案snort v.txt,這裡只給出部分截圖 如果想 1 看到應用層和資料鏈路層的資料 2 把所有的包記錄到硬碟...

Apache的三種工作模式

作為老牌伺服器,apache仍在不斷地發展,就目前來說,它一共有三種穩定的mpm multi processing module,多程序處理模組 它們分別是 prefork worker 和 event 關鍵字 多程序 prefork模式可以算是很古老但是非常穩定的模式。apache在啟動之初,就預...