PHP工作原理

2021-08-22 08:38:10 字數 2275 閱讀 4516

簡介

先看看下面這個過程:

瀏覽器上。

深入**

等等,沒有這麼簡單。以上過程只是個簡略版,讓我們再深入挖掘一下,看看幕後還發生了些什麼。

php解釋程式也隨之啟動;php的啟動過程有兩步;第一步是初始化一些環境變數,這將在整個sapi生命週期中發生作用;第二步是生成只針對當前請求的一些變數設定。

php啟動第一步

不清楚什麼第一第二步是什麼?別擔心,我們接下來詳細討論一下。讓我們先看看第一步,也是最主要的一步。要記住的是,第一步的操作在任何請求到達之前就發生了。

乙個典型的minit方法如下:

php_minit_function(extension_name)

php啟動第二步

乙個典型的rinit方法如下:

php_rinit_function(extension_name)

php關閉第一步

如同php啟動一樣,php的關閉也分兩步:

乙個典型的rshutdown方法如下:

php_rshutdown_function(extension_name)

php關閉第二步

最後,所有的請求都已處理完畢,sapi也準備關閉了,php開始執行第二步:

乙個典型的rshutdown方法如下:

php_mshutdown_function(extension_name)

這樣,整個php生命週期就結束了。要注意的是,只有在伺服器沒有請求的情況下才會執行「啟動第一步」和「關閉第二步」。

下面的是用一些圖示來說明的!

php底層工作原理

圖1 php結構

從圖上可以看出,php從下到上是乙個4層體系

①zend引擎

zend整體用純c實現,是php的核心部分,它將php**翻譯(詞法、語法解析等一系列編譯過程)為可執行opcode的處理並實現相應的處理方法、實現了基本的資料結構(如hashtable、oo)、記憶體分配及管理、提供了相應的api方法供外部呼叫,是一切的核心,所有的外圍功能均圍繞zend實現。

②extensions

圍繞著zend引擎,extensions通過元件式的方式提供各種基礎服務,我們常見的各種內建函式(如array系列)、標準庫等都是通過extension來實現,使用者也可以根據需要實現自己的extension以達到功能擴充套件、效能優化等目的(如貼吧正在使用的php中間層、富文字解析就是extension的典型應用)。

③sapi

④上層應用

這就是我們平時編寫的php程式,通過不同的sapi方式得到各種各樣的應用模式,如通過webserver實現web應用、在命令列下以指令碼方式執行等等。

構架思想:

引擎(zend)+元件(ext)的模式降低內部耦合

中間層(sapi)隔絕web server和php

如果php是一輛車,那麼

車的框架就是php本身

zend是車的引擎(發動機)

ext下面的各種元件就是車的輪子

sapi可以看做是公路,車可以跑在不同型別的公路上

而一次php程式的執行就是汽車跑在公路上。

因此,我們需要:效能優異的引擎+合適的車輪+正確的跑道

apache和php的關係

apache對於php的解析,就是通過眾多module中的php module來完成的。

把php最終整合到apache系統中,還需要對apache進行一些必要的設定。這裡,我們就以php的mod_php5 sapi執行模式為例進行講解,至於sapi這個概念後面我們還會詳細講解。

unix/linux環境下:

loadmodule php5_module modules/mod_php5.so

注:其中modules/mod_php5.so 是x系統環境下mod_php5.so檔案的安裝位置。

windows環境下:

loadmodule php5_module d:/php/php5apache2.dll

注:其中d:/php/php5apache2.dll 是在windows環境下php5apache2.dll檔案的安裝位置。

這兩項配置就是告訴apache server,以後收到的url使用者請求,凡是以php作為字尾,就需要呼叫php5_module模組(mod_php5.so/ php5apache2.dll)進行處理。

apache的生命週期

php工作原理

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

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程序...