也可以通过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:/
也可以通过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
<span><span><?php <br /></span><span>function </span><span>foo</span><span>(</span><span>$bar</span><span>, </span><span>stdClass $baz</span><span>, &</span><span>$bomb</span><span>, </span><span>$bling </span><span>= </span><span>false</span><span>) {<br>}<br><br></span><span>var_dump</span><span>(</span><span>parsekit_func_arginfo</span><span>(</span><span>'foo'</span><span>));<br></span><span>?></span> </span>