php工作原理

2021-08-09 18:22:56 字數 2670 閱讀 1190

1. php的安裝

如果需要自己配置伺服器和 php,有兩個方法將 php 連線到伺服器上。對於很多伺服器,php 均有乙個直接的模組介面(也叫做 sapi)。這些伺服器包括 apache、microsoft internet information server、netscape 和 iplanet 等伺服器。其它很多伺服器支援 isapi,即微軟的模組介面(omnihttpd 就是個例子)。如果 php 不能作為模組支援 web 伺服器,總是可以將其作為 cgi 或 fastcgi 處理器來使用。這意味著可以使用 php 的 cgi 可執行程式來處理所有伺服器上的 php 檔案請求。

2. php的應用程式都是通過web伺服器(如iis,nginx或apache)和php引擎程式解釋執行完成的,工作過程:

(1)當使用者在瀏覽器位址中輸入要訪問的php頁面檔名,然後觸發乙個web請求,並將請求傳送到web伺服器。

(2)web伺服器接受這個請求,並根據其字尾進行判斷是乙個php請求,web伺服器從硬碟或記憶體中調出使用者要訪問的php應用程式,並將其傳送給php引擎程式。

(3)php引擎程式將會對web伺服器傳送過來的檔案從頭到尾進行掃瞄並根據命令從後台讀取,處理資料,並動態地生成相應的html頁面。

(4)php引擎將生成html頁面返回給web伺服器。web伺服器再將html頁面返回給客戶端瀏覽器。

3. php執行模式:

1)cgi 通用閘道器介面(common gateway inte***ce))

2) fast-cgi 常駐 (long-live) 型的 cgi

3) cli  命令列執行   (command line inte***ce)

4)web模組模式 (apache等web伺服器執行的模組模式)

額外解釋:

1)模組模式:

模組模式是以mod_php5模組的形式整合,此時mod_php5模組的作用是接收apache傳遞過來的php檔案請求,並處理這些請求,然後將處理後的結果返回給apache。如果我們在apache啟動前在其配置檔案中配置好了php模組(mod_php5), php模組通過註冊apache2的ap_hook_post_config掛鉤,在apache啟動的時候啟動此模組以接受php檔案的請求。

除了這種啟動時的載入方式,apache的模組可以在執行的時候動態裝載,這意味著對伺服器可以進行功能擴充套件而不需要重新對源**進行編譯,甚至根本不需要停止伺服器。我們所需要做的僅僅是給伺服器傳送訊號hup或者ap_sig_graceful通知伺服器重新載入模組。但是在動態載入之前,我們需要將模組編譯成為動態鏈結庫。此時的動態載入就是載入動態鏈結庫。 apache中對動態鏈結庫的處理是通過模組mod_so來完成的,因此mod_so模組不能被動態載入,它只能被靜態編譯進apache的核心。這意味著它是隨著apache一起啟動的。

2)php在nginx中執行模式(nginx+ php-fpm)

詳細請看 nginx + php 原理一節

補充:

1、cgi、fast-cgi協議

cgi的歷史

cgi全稱是「公共閘道器介面」(common gateway inte***ce),http伺服器與你的或其它機器上的程式進行「交談」的一種工具,其程式須執行在網路伺服器上。cgi可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變數。如php,perl,tcl等。

早期的webserver只處理html等靜態檔案,但是隨著技術的發展,出現了像php等動態語言。 webserver處理不了了,怎麼辦呢?那就交給php直譯器來處理吧!但是,php直譯器如何與webserver進行通訊呢?

為了解決不同的語言直譯器(如php、python直譯器)與webserver的通訊,於是出現了cgi協議。只要你按照cgi協議去編寫程式,就能實現語言直譯器與webserver的通訊。如php-cgi程式。

fast-cgi的改進

有了cgi協議,解決了php直譯器與webserver通訊的問題,webserver終於可以處理動態語言了。但是,webserver每收到乙個請求,都會去fork乙個cgi程序,請求結束再kill掉這個程序。這樣有10000個請求,就需要fork、kill php-cgi程序10000次。有沒有發現很浪費資源?於是,出現了cgi的改良版本,fast-cgi。

fast-cgi每次處理完請求後,不會kill掉這個程序,而是保留這個程序,使這個程序可以一次處理多個請求。這樣每次就不用重新fork乙個程序了,大大提高了效率。fastcgi是語言無關的、可伸縮架構的cgi開放擴充套件,其主要行為是將cgi直譯器程序保持在記憶體中並因此獲得較高的效能。眾所周知,cgi直譯器的反覆載入是cgi效能低下的主要原因,如果cgi直譯器保持在記憶體中並接受fastcgi程序管理器排程,則可以提供良好的效能、伸縮性、fail- over特性等等。

2、php-fpm是什麼

php-fpm是乙個php fastcgi管理器,是只用於php的。php-fpm其實是php源**的乙個補丁,旨在將fastcgi程序管理整合進php包中。php-fpm提供了更好的php程序管理方式,可以有效控制記憶體和程序、可以平滑過載php配置。

程序包含 master 程序和 worker 程序兩種程序。

master 程序只有乙個,負責監聽埠,接收來自 web server 的請求,而 worker 程序則一般有多個(具體數量根據實際需要配置),每個程序內部都嵌入了乙個 php 直譯器,是 php **真正執行的地方。

PHP工作原理

簡介 先看看下面這個過程 瀏覽器上。深入 等等,沒有這麼簡單。以上過程只是個簡略版,讓我們再深入挖掘一下,看看幕後還發生了些什麼。php解釋程式也隨之啟動 php的啟動過程有兩步 第一步是初始化一些環境變數,這將在整個sapi生命週期中發生作用 第二步是生成只針對當前請求的一些變數設定。php啟動第...

php工作原理

php的所有應用程式都是通過web伺服器 如iis或apache 和php引擎程式解釋執行完成的,工作過程 1 當使用者在瀏覽器位址中輸入要訪問的php頁面檔名,然後回車就會觸發這個php請求,並將請求傳送化支援php的web伺服器。2 web伺服器接受這個請求,並根據其字尾進行判斷如果是乙個php...

PHP 工作原理

cgi協議用來確定webserver 例如nginx 也就是內容分發伺服器傳遞過來什麼資料,什麼樣格式的資料 php cgi程序直譯器 php cgi是php的cgi協議程序直譯器,每次啟動時 需要經歷載入php.ini檔案 初始化執行環境 處理請求 返回內容給webserver php cgi程序...