ebu*_*udi 25 php zend-framework php-extension php-internals
我想构建一个PHP扩展,可以动态检查从PHP文件生成的每个操作码并对其进行一些检查.
我遇到了几个网站,发现了一些功能zend_set_user_opcode_handler,但我不明白这个功能如何用来获得完整的操作码ASSIGN !0, 50.
我知道一个命令php -d vld.active=1 -d vld.execute=0 -f [filename].php,我可以使用它来生成PHP操作码,但据我所知,你只能在PHP程序终止后访问操作码.
我想从扩展中得到的是一个操作码,它是在函数执行时逐个(动态地)获得的.
有人可以帮我解决这个问题吗?
您可以使用parsekit可从pecl 网站pecl下载或安装的工具:
sudo pecl install parsekit
Run Code Online (Sandbox Code Playgroud)
该命令的语法是:
array parsekit_compile_string ( string $phpcode [, array &$errors [, int $options = PARSEKIT_QUIET ]] )
Run Code Online (Sandbox Code Playgroud)
参数:
php代码
包含 phpcode 的字符串。与 eval() 的参数类似。
错误
编译期间遇到的错误(包括致命错误)的 2D 哈希值。通过引用返回。
选项
PARSEKIT_QUIET 或 PARSEKIT_SIMPLE 之一。在返回的输出中产生不同程度的详细信息。
返回值
返回一个复杂的多层数组结构,如下详述。
其用法示例如下:
<?php
$ops = parsekit_compile_string('
echo "Foo\n";
', $errors, PARSEKIT_QUIET);
var_dump($ops);
?>
Run Code Online (Sandbox Code Playgroud)
输出太长,无法包含在此答案中,但可以在文档页面上找到
与上述方法非常相似,但解析文件而不是字符串。