PHP内部 - 使用什么错误记录功能?

sym*_*ean 15 php c

我正在编写一个PHP扩展(虽然它开始看起来很像zend扩展).有些情况需要写入日志记录界面.

我看到zend_error()正在其他地方使用:

  • 在github上读取源代码我发现在zend/zend.h中声明了zend_error,但我找不到相应的函数定义

  • 查看使用zend_error的上下文,我怀疑调用将被set_error_handler重新路由/转移

通常情况下,日志记录将在MINIT和MSHUTDOWN(其中大概是由脚本定义的错误处理程序不能产生任何影响)发生,但有可能在倍之间,以及 - 我找一定的一致性.因此试图了解该机制的工作原理.

在MINIT/MSHUTDOWN中使用zend_error()是否安全?

我如何确保始终调用默认错误处理程序?

wor*_*gon 5

好吧,我在PHP Wiki 中找到了这个。我认为这是旧的,但我想它仍然适用于 Zend3:

不要使用 zend_error

zend_error() 应该只在引擎内部使用。在 PHP 扩展中,应该只使用 PHP 的错误函数。通常 php_error_docref() 是最好的选择。php_error_docref() 将通过额外信息扩展错误消息,例如当前函数名称并在需要时正确转义输出。由于 PHP 的模块化架构,Zend 引擎使用 zend_error(),其中 Zend 引擎和 TSRM 应该可以在没有 PHP 的其他部分的情况下进行编译。因此引擎不能使用 PHP 级别的 API。扩展中不存在此限制。

这对我说的是 zend_error 是为在引擎中使用而编写的,而不是被设计为用于构建扩展的工具之一。出于这个原因,您不太可能找到涵盖您所询问的详细信息的文档,即使它确实为您可靠地工作,它也可能不会继续这样做。