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

时间:2018-07-20 11:33:15

标签: php php-extension zephir

有没有办法像xdebug跟踪那样捕获方法/函数调用并用php返回事件?

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

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

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

1 个答案:

答案 0 :(得分:2)

方法是编写一个与zend_execute和zend_execute_internal挂钩的PHP扩展。

请参阅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

现在在模块初始化中,我们可以保留旧指针的引用,并通过我们自己的函数覆盖Zend引擎使用的指针。

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

这些行是钩子的新实现。他们叫原始的。

Xdebug的执行方式与此类似,但是代码却复杂得多,因为它具有与功能周期相关的许多不同功能。