也可以通过vld查看,具体请看本人写的http://blog.csdn.net/21aspnet/article/details/7002644
安装parsekit扩展
http://pecl.php.net/package/parsekit
下载最新的
#wget http://pecl.php.net/get/parsekit-1.3.0.tgz
安装过程省略
可以参考 本人写的http://blog.csdn.net/21aspnet/article/details/7035392 安装apc扩展是一样的原理
还是自动安装很方便
安装:
# /usr/local/php/bin/pecl install parsekit
配置:
php.ini加extension=parsekit.so
重启:
# /usr/local/apache2/bin/apachectl restart
测试:
# /usr/local/php/bin/php -r var_dump(parsekit_compile_string('print 1+1;'));
输出:
array(19) { [type]=> int(4) [type_name]=> string(14) zend_eval_code [fn_flags]=> int(0) [num_args]=> int(0) [required_num_args]=> int(0) [pass_rest_by_reference]=> bool(false) [line_start]=> int(0) [line_end]=> int(0) [return_reference]=> bool(false) [refcount]=> int(1) [last]=> int(4) [size]=> int(4) [t]=> int(2) [last_brk_cont]=> int(0) [current_brk_cont]=> int(-1) [backpatch_count]=> int(0) [done_pass_two]=> bool(true) [filename]=> string(17) parsekit compiler [opcodes]=> array(4) { [0]=> array(8) { [address]=> int(457076436) [opcode]=> int(1) [opcode_name]=> string(8) zend_add [flags]=> int(197378) [result]=> array(3) { [type]=> int(2) [type_name]=> string(10) is_tmp_var [var]=> int(0) } [op1]=> array(3) { [type]=> int(1) [type_name]=> string(8) is_const [constant]=> &int(1) } [op2]=> array(3) { [type]=> int(1) [type_name]=> string(8) is_const [constant]=> &int(1) } [lineno]=> int(1) } [1]=> array(7) { [address]=> int(457076556) [opcode]=> int(41) [opcode_name]=> string(10) zend_print [flags]=> int(770) [result]=> array(3) { [type]=> int(2) [type_name]=> string(10) is_tmp_var [var]=> int(1) } [op1]=> array(3) { [type]=> int(2) [type_name]=> string(10) is_tmp_var [var]=> int(0) } [lineno]=> int(1) } [2]=> array(7) { [address]=> int(457076676) [opcode]=> int(70) [opcode_name]=> string(9) zend_free [flags]=> int(271104) [op1]=> array(4) { [type]=> int(2) [type_name]=> string(10) is_tmp_var [var]=> int(1) [ea.type]=> int(0) } [op2]=> array(3) { [type]=> int(8) [type_name]=> string(9) is_unused [opline_num]=> string(1) 0 } [lineno]=> int(1) } [3]=> array(7) { [address]=> int(457076796) [opcode]=> int(62) [opcode_name]=> string(11) zend_return [flags]=> int(16777984) [op1]=> array(3) { [type]=> int(1) [type_name]=> string(8) is_const [constant]=> &null } [extended_value]=> int(0) [lineno]=> int(1) } }}
再看输出hello word
# /usr/local/php/bin/php -r var_dump(parsekit_compile_string('print \hello word\;'));
输出:
array(19) { [type]=> int(4) [type_name]=> string(14) zend_eval_code [fn_flags]=> int(0) [num_args]=> int(0) [required_num_args]=> int(0) [pass_rest_by_reference]=> bool(false) [line_start]=> int(0) [line_end]=> int(0) [return_reference]=> bool(false) [refcount]=> int(1) [last]=> int(3) [size]=> int(3) [t]=> int(1) [last_brk_cont]=> int(0) [current_brk_cont]=> int(-1) [backpatch_count]=> int(0) [done_pass_two]=> bool(true) [filename]=> string(17) parsekit compiler [opcodes]=> array(3) { [0]=> array(7) { [address]=> int(536780564) [opcode]=> int(41) [opcode_name]=> string(10) zend_print [flags]=> int(770) [result]=> array(3) { [type]=> int(2) [type_name]=> string(10) is_tmp_var [var]=> int(0) } [op1]=> array(3) { [type]=> int(1) [type_name]=> string(8) is_const [constant]=> &string(10) hello word } [lineno]=> int(1) } [1]=> array(7) { [address]=> int(536780684) [opcode]=> int(70) [opcode_name]=> string(9) zend_free [flags]=> int(271104) [op1]=> array(4) { [type]=> int(2) [type_name]=> string(10) is_tmp_var [var]=> int(0) [ea.type]=> int(0) } [op2]=> array(3) { [type]=> int(8) [type_name]=> string(9) is_unused [opline_num]=> string(1) 0 } [lineno]=> int(1) } [2]=> array(7) { [address]=> int(536780804) [opcode]=> int(62) [opcode_name]=> string(11) zend_return [flags]=> int(16777984) [op1]=> array(3) { [type]=> int(1) [type_name]=> string(8) is_const [constant]=> &null } [extended_value]=> int(0) [lineno]=> int(1) } }}
总结:两种方法1.如果要查看单句php的opcode# /usr/local/php/bin/php -r var_dump(parsekit_compile_string('print 1+1;'));
参考 http://www.php.net/manual/zh/function.parsekit-compile-string.php
2.如果要查看网站下某个php文件的opcode
参考 http://www.php.net/manual/zh/function.parsekit-compile-file.php
# /usr/local/php/bin/php -r var_dump(parsekit_compile_file('/var/www/tb.php'));
3.如果要查看某个函数的opcode
参考 http://www.php.net/manual/zh/function.parsekit-func-arginfo.php
