淘先锋技术网

首页 1 2 3 4 5 6 7

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