所以我想出了如何生成我自己的 PHP 错误处理程序并将所有错误记录在日志文件中 - 对用户不可见。我什至制作了第二个日志文件,它只记录 UNIQUE 错误。
现在我想出了如何通过调用 register_shutdown_function('fatal_handler'); 来解决致命错误。
我的 fatal_handler 使用了我的常规错误处理程序使用的相同功能,因此以完全相同的方式记录致命错误。
但这就是事情变得奇怪的地方:当我调用一个致命错误时,我会从我的错误日志记录函数中得到所有这些错误:
警告:file_put_contents():open_basedir 限制生效。文件(errors.log)不在允许的路径内:...
警告:file_put_contents(errors.log):无法打开流:不允许操作
警告:fopen(unique_errors.log):无法打开流:不允许操作
随后任何 fgets、fclose 和 file_put_contents 函数也会因类似错误而失败。
为什么这些错误发生在 fatal_handler 而不是常规错误处理程序?记录致命错误时,我必须做些什么不同的事情?
编辑 :
*也许我应该提到,我尝试访问的日志文件位于 open_base_dir 限制错误消息作为选项列出的路径中的一个子文件夹中。所以错误没有意义,因为它在允许的路径内 - 我的意思是毕竟它只是一个通知而不是一个致命错误时它可以毫不费力地工作。*
所以我的问题又是: 为什么 file_put_contents() 可以在常规错误处理程序上工作,但不能在致命错误处理程序中工作?
我假设我必须在致命错误处理程序中以不同方式指定文件的路径,因为事件发生在不同的级别或类似的东西可能......?我真的对 php 的内部运作一无所知...有没有人有意见或想法?