Переименование функций во время выполнения в PHP

В PHP 5.3 есть способ переименовать функцию или «перехватить» функцию.

Существует rename_function() внутри «APD», которая была нарушена с 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! ??!?! (Должен любить питон 🙂

Обновленное расширение runkit можно найти на http://github.com/zenovich/runkit. Оно поддерживает все современные версии PHP, выпущенные на данный момент (с 4.4 до 5.4+). Этот runkit является официальным и поддерживается.

С уважением, Дмитрий Зенович

Стойка 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 (или runkit.ini в conf.d)

Для использования runkit_function_rename() вам также придется перекомпилировать php с помощью флага конфигурации --enable-maintainer-zts . (Черт тебя, зенд!)

Я понимаю, что этот вопрос немного стар, но я недавно искал способ переименовать функции для тестирования и столкнулся с аналогичными проблемами с APD.

Наконец, нажав на правильный запрос Google и нашел другой вариант: расширение Test_helpers от Себастьяна Бергмана – у него есть собственный rename_function() который, кажется, работает отлично, а также некоторые другие полезные помощники для перехвата и насмешки.

Бонус – относительно безболезненный процесс установки:

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

Затем добавьте extension=test_helpers.so в php.ini