В 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