PHP的工作原理詳解

2021-08-22 08:13:01 字數 2289 閱讀 3128

1. 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頁面返回給客戶端瀏覽器。

2. 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的引擎稱之為zend引擎 對於源程式,php引擎全部讀入,而後進行詞法分析,如果遇到不認識的詞,就報parse error 詞法錯誤後終止分析 詞法分析後進入語法分析 語法分析按照一定的結構例如分號,進行語法組織,分析語法有無錯誤,如果出錯,報syntax error,但會...

php工作原理

1.php的安裝 如果需要自己配置伺服器和 php,有兩個方法將 php 連線到伺服器上。對於很多伺服器,php 均有乙個直接的模組介面 也叫做 sapi 這些伺服器包括 apache microsoft internet information server netscape 和 iplanet ...

PHP工作原理

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