通過VLD擴充套件分析PHP opcode

2021-08-26 21:25:54 字數 1261 閱讀 8559

機器只能理解機器語言,而php作為解釋型指令碼到底是如何被機器執行的呢?

實際上php在執行過程中,分為 詞法分析、語法分析、編譯php指令碼為opcode,最後zend引擎會執行這些opcode。

在上述執行過程中,經常被人提起的解釋型語言效能問題也就是因為每次執行指令碼,上述過程都會重複執行。因此,也就出現了apc, xcache, eaccelerator等快取opchode。

一、安裝vld擴充套件(linux)

2、解壓安裝

# tar zxvf vld-0.11.1.tgz

# cd ./vld-0.11.1

# /usr/local/php/bin/phpize

# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-vld

# make && make install

3、修改php.ini

extension=vld.so

4、重啟apache或php-fpm

二、通過簡單的例子,看看opcode

通過上圖你能獲得哪些資訊呢?

行號、指令編號、指令碼開始標記、結束標記、zend vm指令、返回值、zend vm指令對應的引數。

三、zend vm執行opcode

struct _zend_op ;

struct _zend_op_array ;

zend_api void execute(zend_op_array *op_array tsrmls_dc)

實際上我們編寫的php,最終解析成zend vm中的指令集,最終通過zend vm返回結果。

每一條指令,都可以找到對用的函式執行,例如echo指令對應zend_do_echo。更多的可以檢視zend/compile.h

更多指令參見:同時列出了每條指令的案例

PHP7 2安裝vld擴充套件

這裡解壓至建立的vld資料夾 這裡要找準自己開發機phpize的位置 usr local matrix bin phpize 找準自己開發機上php config的位置 找準php.ini的位置,在末尾新增 extension vld.so 即可 vim usr local matrix lib p...

PHP使用vld擴充套件檢視opcodes

php使用vld擴充套件檢視opcodes 需要分析php 的效能,或者說實現同樣功能的 到底哪個更好呢?或者說想知道底層的實現可以使用vld檢視opcode。該擴充套件以收錄在 pecl 修改 php.ini,增加extension php vld.dll php m 簡單使用vld echo1 ...

擴充套件框架分析

在伺服器端啟動通訊伺服器程式communicateserver.exe,接受客戶端的連線 在客戶端啟動gamestart.exe,連線至伺服器端,在接收到 start 訊息時啟動gameentrypoint.exe,gameentrypoint.exe 將根據配置檔案 引導檔案 載入相應的視窗和相應...