PHP内部-使用什么错误记录函数?

PHP内部-使用什么错误记录函数?,php,c,Php,C,我正在编写一个PHP扩展(尽管它开始看起来很像zend扩展)。在某些情况下,它需要写入日志接口 我看到zend_error()正在其他地方使用,但是: 阅读github上的源代码时,我发现zend/zend.h中声明了zend_错误,但找不到函数的相应定义 查看使用zend_error的上下文,我怀疑set_error_处理程序会重新路由/转移调用 通常情况下,日志记录将在MINIT和mshutton中进行(可能脚本定义的错误处理程序不会产生任何影响),但这两者之间可能也会有一些时间——我正

我正在编写一个PHP扩展(尽管它开始看起来很像zend扩展)。在某些情况下,它需要写入日志接口

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

  • 阅读github上的源代码时,我发现zend/zend.h中声明了zend_错误,但找不到函数的相应定义

  • 查看使用zend_error的上下文,我怀疑set_error_处理程序会重新路由/转移调用

通常情况下,日志记录将在MINIT和mshutton中进行(可能脚本定义的错误处理程序不会产生任何影响),但这两者之间可能也会有一些时间——我正在寻找一些一致性。因此,我们试图了解该机制是如何工作的

在MINIT/mshutton中使用zend_error()安全吗

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

我在中找到了这一点。我认为这很古老,但我想它仍然适用于Zend3:

不要使用zend_错误

zend_error()只能在引擎内部使用。PHP内部 扩展只能使用PHP的错误函数。典型的 php_error_docref()是最佳选择。php_error_docref()将扩展 通过额外信息(如当前函数名)显示错误消息 并在需要时正确地转义输出。zend_error()由 由于PHP的模块化架构,Zend引擎 TSRM应该是可编译的,不需要PHP的其他部分。引擎 因此不能使用PHP级API。这一限制并不存在 扩展


这告诉我zend_错误是为在引擎中使用而编写的,而不是设计为用于构建扩展的工具之一。因此,您不太可能找到包含您所询问的详细信息的文档,而且,即使它确实为您可靠地工作,它也可能不会继续这样做。

您使用的是什么版本的PHP?我可能会在7.2上实现此功能-您是否暗示内部API最近发生了更改?这不在我读过的文档中-你能提供更多信息吗?投票通过,因为这真的很有用-但我仍然在寻找一种记录事件的方法,无法从PHP源代码中重写。为什么你要避免允许PHP应用程序对你的错误进行自定义错误处理?因为我想干扰代码加载过程并具有一致的审计跟踪-如果代码替换了set_error_hander(),那么后续include/require的行为将不同于早期的加载操作。好吧,这是您的项目,但我认为最好使用建立良好且精心维护的PHP日志记录/错误结构,并且只使用文档(或处理)其他开发人员交互的影响。不管怎样,祝你好运!