我正在尝试使用override_function
http://php.net/manual/en/function.override-function.php 来自
http://pecl.php.net/package/apd 但APD自2004年以来一直没有更新,不再通过PECL安装。
我尝试使用中列出的补丁编译它 http://pecl.php.net/bugs/bug.php?id=16780&edit=2
它成功但我正在使用的编译指令
sudo /Applications/MAMP/bin/php5.3/bin/phpize CFLAGS='-O2 -arch i386 -arch ppc -g -Os' LDFLAGS='-O2 -arch i386 -arch ppc ' CXXFLAGS='-O2 -arch i386 -arch ppc -g -Os'
正在创建一个64位架构的文件
/tmp/apd/apd-1.0.1: file modules/apd.so
modules/apd.so: Mach-O 64-bit bundle x86_64`
我不知道它为什么不起作用 - 但这已成为我可能只能覆盖其他方式的功能的超长途径。
override_function('header', '$a', 'echo $a;');
答案 0 :(得分:3)
另一种可能性是使用runkit_function_redefine
。
请注意,runkit的PECL version来自2006年,而github上有更新的版本。
答案 1 :(得分:0)
这对我有用:从PECL主页获取最新的apd源代码。使用上面提到的patch,phpize,make,make test,make install来修补它。然后按照instructions加载模块。
$ file apd-1.0.1 / module / apd.so:
apd-1.0.1/modules/apd.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped
php -v给了我:
PHP 5.3.5-1ubuntu7.2 with Suhosin-Patch (cli) (built: May 2 2011 23:18:30)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Advanced PHP Debugger (APD) v1.0.1, , by George Schlossnagle