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


本文转自cloves 51CTO博客,原文链接:http://blog.51cto.com/yeqing/1947654

相关文章
|
2月前
|
安全 关系型数据库 MySQL
PHP手术麻醉临床信息管理系统源码 术前、术中、术后全流程管理
麻醉文书是用于管理患者手术全过程的文书。 麻醉同意:医院麻醉知情同意书的填写和编辑; 病案查询:可以通过搜索框搜索患者查询病案; 申请手术:手术申请单的填写和打印; 风险评估:医院手术风险评估表的书写和编辑。
43 0
|
2月前
|
安全 前端开发 JavaScript
PHP医院信息化B/S手麻系统源码
开发语言:PHP、 js 技术架构:mysql+laravel+vue2 开发工具:oh-storm 前端框架:vue2 element 后端框架:laravel 数 据 库:mysql 8.0
25 0
PHP医院信息化B/S手麻系统源码
|
3月前
|
关系型数据库 MySQL PHP
分享151个PHP源码,总有一款适合您
分享151个PHP源码,总有一款适合您
35 0
|
3月前
|
SQL 安全 关系型数据库
分享148个PHP源码,总有一款适合您
分享148个PHP源码,总有一款适合您
26 0
|
3月前
|
数据采集 自然语言处理 算法
分享109个PHP源码,总有一款适合您
分享109个PHP源码,总有一款适合您
23 1
|
3月前
|
关系型数据库 MySQL PHP
分享96个PHP源码,总有一款适合您
分享96个PHP源码,总有一款适合您
24 3
|
3月前
|
安全 关系型数据库 MySQL
分享97个PHP源码,总有一款适合您
分享97个PHP源码,总有一款适合您
32 1
|
1月前
|
数据采集 存储 JavaScript
PHP爬虫技术:利用simple_html_dom库分析汽车之家电动车参数
本文旨在介绍如何利用PHP中的simple_html_dom库结合爬虫代理IP技术来高效采集和分析汽车之家网站的电动车参数。通过实际示例和详细说明,读者将了解如何实现数据分析和爬虫技术的结合应用,从而更好地理解和应用相关技术。
PHP爬虫技术:利用simple_html_dom库分析汽车之家电动车参数
|
1月前
|
SQL 存储 监控
基于PHP的英语四六级在线模拟考试平台(论文+源码)_kaic
基于PHP的英语四六级在线模拟考试平台(论文+源码)_kaic
|
1月前
|
存储 PHP Apache
使用CFimagehost源码搭建无需数据库支持的PHP免费图片托管私人图床
使用CFimagehost源码搭建无需数据库支持的PHP免费图片托管私人图床