0

我正在尝试使用 vld 查看 php 文件的操作码

准备

我已经安装了 vld:

pecl install channel://pecl.php.net/vld-0.12.0

为了熟悉 VLD,我尝试与 php 文件(echo1 和 echo2)进行比较

回声1.php

<?php
echo "Hello"." "."World";

回声2.php

<?php
echo "Hello"," ","World";

phpinfo() 显示 vld 似乎已启用:

vld support        enabled

Directive   Local Value Master Value
vld.active         0    0
vld.col_sep             
vld.dump_paths     1    1
vld.execute        1    1
vld.format         0    0
vld.save_dir       /tmp /tmp
vld.save_paths     0    0
vld.skip_append    0    0
vld.skip_prepend   0    0
vld.verbosity      1    1

问题

运行 php 文件显示输出而不是操作码

# php -dvld.active=1 -f echo1.php
Hello World

# php -dvld.active=1 -dvld.execute=0 -f echo1.php
Hello World

# php -dvld.active=1 -f echo2.php
Hello World

# php -dvld.active=1 -dvld.execute=0 -f echo2.php
Hello World

显然我错过了一些东西:)

运行的版本

php版本

# php -v
PHP 5.4.4-14+deb7u14 (cli) (built: Aug 21 2014 08:36:44)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

使用 Apache 2.2.22 在 Virtualbox 中运行 Debian

4

2 回答 2

2

更新到 PHP 5.6.2 后,我又试了一下,它正在运行 :)

php版本

# php -v
PHP 5.6.2 (cli) (built: Oct 17 2014 07:22:10)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies

安装梨

yum install php56w-pear

安装 vld

pecl install vld

向 /etc/php.ini 添加扩展名(或在 /etc/php.d/__.ini 中的文件中)

#/etc/php.d/vld.ini
extension=vld.so

重新启动 httpd 服务并再次测试(手指交叉)

 # php -dvld.active=1 -f echo1.php
 Finding entry points
 Branch analysis from position: 0
 Jump found. Position 1 = -2
 filename:       /var/www/html/echo1.php
 function name:  (null)
 number of ops:  4
 compiled vars:  none
 line     #* E I O op                           fetch          ext  return  operands
 -------------------------------------------------------------------------------------
    2     0  E >   CONCAT                                           ~0      'Hello', '+'
          1        CONCAT                                           ~1      ~0, 'World'
          2        ECHO                                                     ~1
    3     3      > RETURN                                                   1

 branch: #  0; line:     2-    3; sop:     0; eop:     3; out1:  -2
 path #1: 0,
 Hello World

轰宝贝!

我不知道为什么,但它按预期工作:)

现在可以开始 OPCODE 冒险(也是一个爱情故事)

于 2014-11-14T13:51:11.480 回答
0

您可能被添加extension.so到错误的 php.ini 文件中

您可能会将扩展名添加到您的网络服务器使用的 php.ini,而不是 cli 版本

您可以做的是运行locate php.ini,选择 php.ini 的 cli 版本并添加extension.so到该文件中

通常 cli 版本的 php.ini 位于/etc/php5/cli/php.ini

不要忘记重新启动您的控制台

于 2015-01-20T16:43:14.543 回答