2010-05-17 29 views
8

在PHP 5.3中,有一種方法可以重命名函數或「掛鉤」函數。在PHP中運行時重命名函數

「APD」中有rename_function(),自2004年以來已被破壞。如果你嘗試構建它的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的重要功能!?!?!(得愛蟒蛇:)

+0

我知道這個問題是有點老了,但你能告訴我你的代碼? – Glaslos 2011-10-21 15:09:07

+0

@格拉斯洛斯據我所知,這一切都不再有效。 – rook 2011-10-21 17:24:22

+0

我讓APD工作。所以,也許我可以幫你... – Glaslos 2011-10-25 02:48:09

回答

2

向上最新runkit擴展可以在http://github.com/zenovich/runkit 找到它支持所有現代目前發佈的PHP版本(從4.4到5.4+)。這個runkit是官方的,並支持。

真誠, 梅德Zenovich

+0

謝謝!這是一個有用的擴展。 – rook 2012-09-08 23:10:25

2

Runkit中繼是5.3 +兼容。

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

= runkit.so添加擴展到php.ini中(或conf.d runkit.ini)

爲了使用runkit_function_rename()你也必須重新編譯PHP與--enable-maintainer-zts配置標誌。 (該死的你zend!)

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