文档章节

利用PHP的VLD查询OPCODE

刘纪君
 刘纪君
发布于 2013/03/31 21:32
字数 636
阅读 93
收藏 4

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

为了能更好的查看php的编译过程需要用VLD来查看php的编译的OPCODE代码:

1:下载 VLD扩展包:# wget http://pecl.php.net/get/vld-0.10.1.tgz  

2:安装:

# tar zxvf vld-0.10.1.tgz
# cd ./vld-0.10.1
# /usr/local/php/bin/phpize 或者直接phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-vld
# make && make install

3:编辑php.ini文件加入vld扩张:extension="vld.so"#确保vld.so在扩张路径下面

然后需要重启Apache或者是nginx

<?php
$a = 1;
$b = $a++;
echo $b;
echo $a;

root@bogon no-debug-non-zts-20060613]# /usr/local/php/bin/php -dvld.active=1 /usr/src/source/test.php

Finding entry points
Branch analysis from position: 0
Return found
filename:       /usr/src/source/test.php
function name:  (null)
number of ops:  7
compiled vars:  !0 = $a, !1 = $b
line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   2     0  >   ASSIGN                                                   !0, 1
   3     1      POST_INC                                         ~1      !0
         2      ASSIGN                                                   !1, ~1
   4     3      ECHO                                                     !1
   5     4      ECHO                                                     !0
   6     5    > RETURN                                                   1
         6*   > ZEND_HANDLE_EXCEPTION                                    

branch: #  0; line:     2-    6; sop:     0; eop:     6
path #1: 0,

  1. -dvld.active 是否在执行PHP时激活VLD挂钩,默认为0,表示禁用。可以使用-dvld.active=1启用。  
  2. -dvld.skip_prepend 是否跳过php.ini配置文件中auto_prepend_file指定的文件, 默认为0,即不跳过包含的文件,显示这些包含的文件中的代码所生成的中间代码。此参数生效有一个前提条件:-dvld.execute=0  
  3. -dvld.skip_append 是否跳过php.ini配置文件中auto_append_file指定的文件, 默认为0,即不跳过包含的文件,显示这些包含的文件中的代码所生成的中间代码。此参数生效有一个前提条件:-dvld.execute=0  
  4. -dvld.execute 是否执行这段PHP脚本,默认值为1,表示执行。可以使用-dvld.execute=0,表示只显示中间代码,不执行生成的中间代码。  
  5. -dvld.format 是否以自定义的格式显示,默认为0,表示否。可以使用-dvld.format=1,表示以自己定义的格式显示。这里自定义的格式输出是以-dvld.col_sep指定的参数间隔  
  6. -dvld.col_sep 在-dvld.format参数启用时此函数才会有效,默认为 “\t”。  
  7. -dvld.verbosity 是否显示更详细的信息,默认为1,其值可以为0,1,2,3 其实比0小的也可以,只是效果和0一样,比如0.1之类,但是负数除外,负数和效果和3的效果一样 比3大的值也是可以的,只是效果和3一样。  
  8. -dvld.save_dir 指定文件输出的路径,默认路径为/tmp。  
  9. -dvld.save_paths 控制是否输出文件,默认为0,表示不输出文件  
  10. -dvld.dump_paths 控制输出的内容,现在只有0和1两种情况,默认为1,输出内容 

© 著作权归作者所有

刘纪君
粉丝 30
博文 133
码字总数 59637
作品 0
郑州
高级程序员
私信 提问
加载中

评论(0)

PHP性能之语言性能优化:vld——查看代码opcode的神器

vld介绍   vld是PECL(PHP 扩展和应用仓库)的一个PHP扩展,现在最新版本是 0.14.0(2016-12-18),它的作用是:显示转储PHP脚本(opcode)的内部表示(来自PECL的vld简介)。简单来说,可...

osc_4nbpryu9
2019/07/04
1
0
发布一个查看PHP opcode的扩展模块及Web服务

最近花了大约一星期的时间写了一个PHP扩展模块Opdumer,并封装成了Web服务(点击这里访问)。这个模块的主要内容是输出PHP代码对应的opcode。其实之前已经有一些用于查看opcode的扩展模块,如...

CodingLabs
2012/05/16
0
0
PHP性能优化工具--vld

PHP性能优化工具--vld 孤独求学人2016-12-251 阅读 工具优化PHP性能 PHP性能优化工具--vld vld介绍 vld 是一个在Zend引擎中,以挂钩的方式实现的用于输出PHP脚本生成的中间代码(执行单元)的...

孤独求学人
2016/12/25
0
0
Webshell检测方法(四)

     本篇工作依旧使用了随机森林算法,而前一篇文章[Webshell检测方法(三)]结合的是fastText,本篇文章结合的是梯度提升迭代决策树算法。    0x01 研究方法   在前一篇文章中,对于...

嘶吼RoarTalk
02/26
0
0
PHP安装VLD查看opcode

# wget http://pecl.php.net/get/vld-0.10.1.tgz # tar zxvf vld-0.10.1.tgz # cd ./vld-0.10.1 # /usr/local/php/bin/phpize 或者直接phpize # ./configure --with-php-config=/usr/local/p......

晨曦之光
2012/03/09
1.2K
2

没有更多内容

加载失败,请刷新页面

加载更多

时间片轮询法

时间片轮询法 时间片轮询法是一种比较简单易用的系统架构之一,它对于系统中的任务调度算法是分时处理。核心思路是把 CPU 的时间分时给各个任务使用。我们常用的定时方法是定时器,把调度器放...

osc_j7rfhwi0
48分钟前
15
0
二项堆(三)之 Java的实现

概要 前面分别通过C和C++实现了二项堆,本章给出二项堆的Java版本。还是那句老话,三种实现的原理一样,择其一了解即可。 目录 1. 二项树的介绍 2. 二项堆的介绍 3. 二项堆的基本操作 4. 二项...

osc_ct8a6sdg
49分钟前
9
0
Windows 10 安装 Hadoop 2.10

  1. 配置JAVA_HOME环境和Hadoop环境:      2. 配置bin   3. 进入Hadoop中/etc/hadoop下     配置hdfs-site.xml增加:    <property> <!-- 单节点,所以配置成1 -->...

osc_jmtenr3d
50分钟前
32
0
如何让你在众多二手车中挑中满意的?python帮你实现(附源码)

前言 老司机带你去看车,网上的几千条的二手车数据,只需几十行代码,就可以统统获取,保存数据到我们本地电脑上 知识点: 1.python基础知识 2.函数 3.requests库 4.xpath适合零基础的同学 ...

osc_rmqoxylv
51分钟前
12
0
Selenium IDE使用指南三(控制流)

Selenium IDE附带的命令使您可以添加条件逻辑和循环到测试中。 这使您仅在满足应用程序中的某些条件时才执行命令(或一组命令),或根据预定义的标准重复执行命令。 JavaScript表达式 通过使...

分布式编程
51分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部