php源码 研究,php源码分析

wget http://pecl.php.net/get/vld-0.11.2.tgz

tar zxf vld-0.11.2.tgz

cd vld-0.11.2

which phpize

/usr/bin/phpize

find / -name 'php-config'

/usr/bin/php-config

./configure --with-php-config=/usr/bin/php-config --enable-vld

echo $?

make && make install

ll /usr/lib64/php/modules/

vi php.ini

extension=vld.so

/etc/init.d/php-fpm restart

查看phpinfo()

====================案例:

vi demo.php

$a = ‘hello world’;

echo $a;

=====================源码分析:

[root@node2 yeqing]# php -dvld.active=1 ./demo.php

Finding entry points

Branch analysis from position: 0

Return found

filename:       /home/yeqing/demo.php

function name:  (null)

number of ops:  3

compiled vars:  !0 = $a

line     # *  op                           fetch          ext  return  operands

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

2     0  >   ASSIGN                                                   !0, 'hello+world%21%21'

3     1      ECHO                                                     !0

6     2    > RETURN                                                   1

branch: #  0; line:     2-    6; sop:     0; eop:     2

path #1: 0,

hello world!!

================

行号、opcodes指令编号、脚本开始标记、结束标记、ZEND VM指令、返回值、ZEND VM指令对应的参数

opcodes手册:

http://php.net/manual/en/internals2.opcodes.list.php

================如上为VLD输出的PHP代码生成的中间代码的信息,说明如下

Branch analysis from position 这条信息多在分析数组时使用。

Return found 是否返回,这个基本上有都有。

filename 分析的文件名

function name 函数名,针对每个函数VLD都会生成一段如上的独立的信息,这里显示当前函数的名称

number of ops 生成的操作数

compiled vars 编译期间的变量,这些变量是在PHP5后添加的,它是一个缓存优化。这样的变量在PHP源码中以IS_CV标记。

op list 生成的中间代码的变量列表

使用-dvld.active参数输出的是VLD默认设置,如果想看更加详细的内容。可以使用-dvld.verbosity参数。

php -dvld.active=1 -dvld.verbosity=3 demo.php

其中:

-dvld.verbosity=3是VLD在当前版本可以显示的最详细的信息

如果我们只是想要看输出的中间代码,并不想执行这段PHP代码,可以使用-dvld.execute=0来禁用代码的执行

php -dvld.active=1 -dvld.execute=0 demo.php

读源码要学会一种精神: 顺藤摸瓜

参考文档:

http://www.php-internals.com/book/?p=C-php-vld

http://www.php-internals.com/book/?p=chapt02/02-03-02-opcode

http://php.net/manual/zh/internals2.ze1.zendapi.php

http://www.laruence.com/2011/03/04/1894.html

http://blog.pureisle.net/archives/2294.html

http://www.imsiren.com/archives/704

http://blog.csdn.net/siren0203/article/details/8085813

http://www.cnblogs.com/miao-zp/p/6374311.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值