PHP расширение — PHP на событие вызова метода / функции

Есть ли способ перехватить вызовы метода / функции и вернуть событие с помощью php, как трассировка xdebug?

Я пытался использовать register_tick_function, но я не уверен, что это хороший подход.

Я также попытался сделать свое собственное расширение php (используя Zephir), но все еще та же проблема.

Кстати, я не хочу использовать расширение xdebug. Каков наилучший подход?

3

Решение

Подход заключается в написании расширения PHP, которое подключается к zend_execute и zend_execute_internal.

Смотрите следующие связанные строки в расширении профилировщика tideways_xhprof:

https://github.com/tideways/php-xhprof-extension/blob/master/tideways_xhprof.c#L15-L18

Эти первые две строки объявляют глобальные переменные для хранения старых / оригинальных указателей на функции. Вторые две строки — это объявление новых функций, которые оборачивают оригинальные.

https://github.com/tideways/php-xhprof-extension/blob/master/tideways_xhprof.c#L67-L71

Теперь в модуле init мы можем сохранить ссылку на старые указатели и перезаписать ту, которую движок Zend использует с нашими собственными функциями.

https://github.com/tideways/php-xhprof-extension/blob/master/tideways_xhprof.c#L164-L200

Эти строки являются новыми реализациями хуков. Они называют оригинальные.

Xdebug делает это аналогичным образом, но код гораздо сложнее, потому что он имеет много различных функций, которые подключаются к циклу функций.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]