PHP上的方法/函数调用事件

d3c*_*ima 5 php php-extension zephir

有没有一种方法可以捕获方法/函数调用并使用xdebug跟踪之类的php返回事件?

我尝试使用register_tick_function,但是我不太确定这是个好方法。

我也尝试做自己的php扩展(使用Zephir),但仍然是同样的问题。

顺便说一句,我不想​​使用xdebug扩展。最好的方法是什么?

小智 2

方法是编写一个 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 以类似的方式完成此操作,但代码要复杂得多,因为它有许多不同的功能挂接到函数循环中。