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将提高我们代码质量和效率。