PHP 開篇,世界上最好的語言底層是怎麼執行的

2021-09-26 02:44:41 字數 2305 閱讀 7072

php在業界被調侃,是世界上最好的語言,php確實是web開發裡的利器,具體點說,就是乙個用c語言實現包含大量元件模組的軟體框架。是乙個強大的ui框架。

php動態語言執行過程:拿到一段**後,經過詞法解析、語法解析等階段後,源程式會被翻譯成乙個個指令(opcodes),然後zend虛擬機器順次執行這些指令完成操作。php本身是用c實現的,因此最終呼叫的也是c的函式,實際上,我們可以把php看做乙個c開發的軟體。

複雜的結構需要分層,tcp/ip協議因為分層得到了很好的應用,不熟悉的同學可以去我的計算機網路專欄的文章裡看一看,php也是主要分為四層,分層處理,提高處理效率和職能。

php從下倒上是乙個4層體系:

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

2、extensions:圍繞著zend引擎,extensions通過元件式的方式提供各種基礎服務,我們常見的各種內建函式(array系列)、標準庫等都是通過extension來實現cgi即通用閘道器介面,使用者也可以根據需要實現自己的extension的典型應用)。

博主夢話:印象裡在win上開發的時候,有個ext資料夾,裡面裝載著各種類庫,就是extensions層。

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

sapi通過一系列的介面,使得外部應用可以和php交換資料並可以根據不同應用特點實現特定的處理方法,我們常見一些sapi有:

var_dump(php_sapi_name()); # 輸出當前php執行模式
1、cgi/fastcgi

下文有詳細解釋。

2、apache2handler

php作為apache模組,apache伺服器在系統啟動後,預先生成多個程序副本駐留在記憶體中,一旦有請求出 現,就立即使用這些空餘的子程序進行處理,這樣就不存在生成子程序造成的延遲了。這些伺服器副本在處理完一次http請求之後並不立即退出,而是停留在計 算機中等待下次請求。對於客戶瀏覽器的請求反應更快,效能較高。

3、apache模組的dll

該執行模式是我們以前在windows環境下使用apache伺服器經常使用的,而在模組化(dll)中,php是與web伺服器一起啟動並執行的。

博主夢話:印象裡在win上開發的時候,有個ext資料夾,裡面裝載著各種類庫,就是.dll結尾的檔案。

4、cli

在最開始設計php這門語言時是為了執行指令碼,所以win上和linux中都有 cli模式,cli模式會強制使用一些配置引數,強制關閉緩衝區的資料,執行也非常高效,常用的引數:

-a 互動式執行phpcli程式

-c 告訴php,從那個路徑尋找php.ini

-l 檢查php檔案的語法,不執行

-m 檢視編譯的模組

之前網際網路上的web服務都屬於html,靜態資源分布,隨著網際網路的發展,後來出現了像asp、jsp、php這種動態語言,動態語言的特點是需要web伺服器的解析cgi就是web伺服器和動態語言通訊的閘道器。

cgi即通用閘道器介面(common gateway inte***ce),它是動態語言的產物,是負責web服務與php通訊的介面,cgi方式在遇到連線請求(使用者 請求)先要建立cgi的子程序,啟用乙個cgi程序,然後處理請求,處理完後結束這個子程序。這就是fork-and-execute模式。所以用cgi 方式的伺服器有多少連線請求就會有多少cgi子程序,子程序反覆載入是cgi效能低下的主要原因。

在這個基礎上產生了fastcgi,fastcgi像是乙個常駐(long-live)型的cgi,它可以一直執行著,只要啟用後,不會每次都要花費時間去fork一 次。php使用php-fpm(fastcgi process manager),全稱php fastcgi程序管理器進行管理。

我理解的php-fpm是php對fastcgi封裝的模組,是php對cgi閘道器通訊的優化和擴充套件,web伺服器都在php-fpm實現。配置檔案裡的listen。listen負責監聽ip和埠,檢視php-fpm的配置檔案,檢視監聽埠,預設是9000,然後配置你的nginx。

ps aux | grep php

listen = 127.0.0.1:9000

nginx server裡配置:

server 

}

PHP是世界上最好的語言

if eregi hackerdj get id get id urldecode get id 一次解碼 if get id hackerdj can you authenticate to this website?urlencode編碼主要用於將字串以url編碼,返回乙個字串 urldecod...

觀點第四期 PHP是世界上最好的語言麼

no,個人認為 這個問題 就像問 蘋果手機是最好的手機?一樣一樣的 誰知道 手機這種移動終端,能否像 當下的 手機硬體中的 攝像頭模組,被塞進 另外 乙個 很牛 的移動終端,vr,ar.依舊延續著 當前手機的功能,只是換了乙個 身軀,就如同 喬幫主 定義乙個 公式 iphone mp4 camera...

世界上最好的中文名字是什麼

其實斯澤夫這名字很好聽,有中國味道,叫著也很上口,如果深入一下,有很多意思可以發掘出來。2009 10 03 中國人到美國,常常有乙個安妮 傑克之類的洋名字,不是為了好聽,也是為了方便。老外來到中國,同樣也有不少附庸風雅,取乙個中文名字來聽聽,尤其是常駐中國的外交官 企業家等上層人物。例如美國的駐華...