php7 opcode,php7最小化安装 && vld扩展安装并查看php代码的opcode && ast测试

php7最小化安装 && vld扩展安装并查看php代码的opcode && ast测试

最小化安装php7

cd ~/software/

cd php-src

git checkout php-7.2.13

cd ../

cp  -r php-src php7.2

cd php7.2

./buildconf –force

./configure –prefix={家目录}/software/temp/php7  –disable-all

make && make install

核心模块:Core date ereg pcre Reflection SPL standard

较php5多出一个ereg模块,且bin目录下多了phpdbg可执行文件

安装vld

git clone https://github.com/derickr/vld.git

cd vld

~/software/temp/php7/bin/phpize

./configure –with-php-config={家目录}/software/temp/php7/bin/php-config –enable-vld

make && make install

cd ~/software/temp/php7/lib

touch php.ini

echo ‘extension=vld.so’ > php.ini

~/software/temp/php7/bin/php -m | grep vld 如果在输出的结果能看到vld,则说明vld扩展启用成功。

测试vld生成opcode

cd ~/software/temp/php7

mkdir test

cd test

touch vld.php

输入如下代码:

$str = ‘hello world’;

var_dump($str);

执行如下命令查看上述php代码的opcode:

~/software/temp/php7/bin/php -dvld.active=1 vld.php

执行结果如下:

Finding entry points

Branch analysis from position: 0

1 jumps found. (Code = 62) Position 1 = -2

filename: /home/leon/software/temp/php7/test/vld.php

function name: (null)

number of ops: 5

compiled vars: !0 = $str

line #* E I O op fetch ext return operands

-------------------------------------------------------------------------------------

2 0 E > ASSIGN !0, 'hello+world'

3 1 INIT_FCALL 'var_dump'

2 SEND_VAR !0

3 DO_ICALL

4 4 > RETURN 1

branch: # 0; line: 2- 4; sop: 0; eop: 4; out0: -2

path #1: 0,

string(11) "hello world"

图形化调用结果

安装dot

sudo apt-get install graphviz

~/software/temp/php7/bin/php -dvld.active=1 -dvld.save_paths=1 vld.php

dot -Tpng /tmp/paths.dot -o paths.png

结果如下:

ohjqklux4le11116.png

测试token_get_all

需要先安装tokenizer扩展,安装步骤同vld安装步骤

$tokens = token_get_all('<?php echo; ?>');

foreach ($tokens as $token) {

if (is_array($token)) {

echo "Line {$token[2]}: ", token_name($token[0]), " ('{$token[1]}')", PHP_EOL;

}

}

?>

php执行后结果为:

Line 1: T_OPEN_TAG (‘<?php ‘)

Line 1: T_ECHO (‘echo’)

Line 1: T_WHITESPACE (‘ ‘)

Line 1: T_CLOSE_TAG (‘?>’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值