在PHP中运行时重命名函数

时间:2010-05-17 02:26:37

标签: php debugging pecl php-extension

在PHP 5.3中,有一种重命名函数或“挂钩”函数的方法。

自2004年以来,“APD”中的rename_function()已被破坏。如果您尝试在PHP 5.3上构建它,您将收到此错误:

'struct _zend_compiler_globals' has no member named 'extended_info'

这是一个非常容易修复的错误,只需更改此行:

GC(extended_info) = 1;

CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO;

我修改了我的php.ini,APD显示在我的phpinfo()中。但是,当我调用rename_function()时,PHP页面无法加载,我的/var/log/apache2/error.log中出现了分段错误。

无论如何修复APD以使用现代版本的PHP?或者是否有另一种重命名函数的方法? 为什么地球上的重要特征不在于PHP!??!?!(得爱蟒蛇:):

3 个答案:

答案 0 :(得分:2)

Runkit trunk与5.3+兼容。

svn checkout http://svn.php.net/repository/pecl/runkit/trunk runkit
cd runkit
phpize
./configure
make && make install

将extension = runkit.so添加到php.ini(或conf.d中的runkit.ini)

为了使用runkit_function_rename(),您还必须使用--enable-maintainer-zts配置标志重新编译php。 (该死的你好!)

答案 1 :(得分:2)

我意识到这个问题有点陈旧,但我最近正在寻找一种方法来重命名测试功能,并遇到与APD类似的困难。

最后点击了正确的Google查询并找到了另一个选项:Sebastian Bergmann的test_helpers extension - 它有自己的rename_function()似乎工作正常,以及其他一些方便帮助拦截和嘲笑事物。

奖金 - 一个相对无痛的安装过程:

$ pear channel-discover pear.phpunit.de
$ pecl install phpunit/test_helpers

然后将extension=test_helpers.so添加到您的php.ini

答案 2 :(得分:2)

可以在http://github.com/zenovich/runkit上找到最新的runkit扩展 它支持暂时发布的所有当代PHP版本(从4.4到5.4+)。这个runkit是官方的并且受到支持。

此致 德米特里·泽诺维奇