Mac系統中使用PHP vld
VLD (Vulcan Logic Dumper) 是由加拿大程序員Derick Rethans所開發的PHP擴展庫,可以對PHP代碼進行反編譯,以便更好地理解代碼的執行過程。
VLD的適用范圍
VLD是一個強大的工具,它可以幫助開發人員更好地理解PHP代碼的執行過程。主要有如下用處: 1.排查PHP代碼性能問題 2.尋找代碼漏洞 3.加深對PHP內部機制的理解
安裝VLD
Mac系統自帶了PHP,我們只需要安裝VLD擴展即可。 打開終端,執行以下命令:
brew install php-vld
使用VLD
我們來看一個例子:
function foo($num1, $num2) { if ($num1 >$num2) { echo $num1; } else { echo $num2; } } foo(1, 2);
執行以下命令:
php -d vld.active=1 -d vld.execute=0 foo.php
輸出如下:
Finding entry points Branch analysis from position: 0 Return found filename: /Users/username/Documents/foo.php function name: foo number of ops: 8 compiled vars: !0 = $num1, !1 = $num2 line #* E I O op fetch ext return operands ------------------------------------------------------------------------------------- 3 0 E >EXT_STMT 1 FETCH_DIM_R $4 !0, 1 2 FETCH_DIM_R $5 !1, 1 3 IS_GREATER_OR_EQUAL ~6 $4, $5 4 >JMPZ ~6, ->6 4 5 >EXT_STMT 6 >FETCH_DIM_R $7 !0, 1 7 ECHO $7 8 >JMP ->9 6 9 >EXT_STMT 10 FETCH_DIM_R $8 !1, 1 11 ECHO $8 12 >RETURN
解讀輸出
上面的輸出可以看出foo函數一共有8行,參數有兩個:$num1和$num2,編譯后分別賦值給$4和$5。具體過程如下: 1、第3行里執行了一個if判斷,只有當$num1大于等于$num2時進入條件語句執行第5行。 2、第5行里將$num1的值存在一個新的變量$7中,然后執行一個echo語句輸出。 3、第6行里執行了一個else條件語句,當$num1小于$num2時,直接進入第9行。 4、第9行里將$num2的值存在一個新的變量$8中,然后執行一個echo語句輸出。 通過VLD輸出可知,foo()函數的運行過程中,主要進行了if-else條件語句的判斷輸出,比較簡單明了。
總結
VLD是一個非常實用的PHP擴展庫,它可以幫助我們更好地理解PHP代碼的執行過程,快速排查代碼性能問題,尋找代碼漏洞。在實際項目中,使用VLD將提高我們代碼質量和效率。