php - 如何让 PHP 在发生 fatal error 时记录堆栈跟踪

标签 php

我已将 php 配置为记录错误,在我的开发机器上,它们在 apache 错误日志中显示为:

[Thu Mar 17 18:22:07 2011] [error] [client ::1] PHP Parse error:  syntax error, unexpected ')' in /Users/troelskn/Projects/test/bootstrap.inc.php on line 27
[Thu Mar 17 18:22:07 2011] [error] [client ::1] PHP Stack trace:
[Thu Mar 17 18:22:07 2011] [error] [client ::1] PHP   1. {main}() /Users/troelskn/Projects/test/public/index.php:0

但是,在生产机器 (Ubuntu) 上,错误之后没有堆栈跟踪,并且消息中附加了一个引荐来源网址。例如。它看起来像:

[Thu Mar 17 18:22:07 2011] [error] [client ::1] PHP Parse error:  syntax error, unexpected ')' in /Users/troelskn/Projects/test/bootstrap.inc.php on line 27, referer: http://localhost/

如何控制这种格式?我非常希望在日志中提供堆栈跟踪。

最佳答案

好吧,正如已经指出的那样,您在实时机器上没有得到相同的格式,因为实时机器没有安装 xdebug。有 debug_backtrace 但这不会捕获 fatal error 。

您可以在实时服务器上安装 xdebug,但您必须非常小心地将其配置为不公开任何功能,除了堆栈跟踪日志记录。在 live box 上不小心使用 xdebug 可能会带来安全风险,因为人们可能会启动远程调试 session ,或者其增强的错误消息可能会无意中回显代码的内部细节。

说实话?我认为您最好的选择是尝试重新创建实时服务器记录的错误发生在您的测试服务器上的情况。

编辑添加:忘记提及除了安全风险之外,xDebug 还会对您网站的性能产生负面影响。它以几种重要的方式连接到 Zend Engine 以记录程序状态并改变其行为(例如覆盖@错误抑制),这将不可避免地影响性能。与将调试工具添加到实际环境相比,尝试在测试环境中复制问题基本上要好得多。

关于php - 如何让 PHP 在发生 fatal error 时记录堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5350070/

相关文章:

php - 如何使用由iphone应用程序发送的时区将时间戳存储在mysql数据库中

javascript - XMLHttpRequest发送图像文件

php - mysql中的条件插入

java - 使用 Twitter 身份验证验证用户

php - Symfony 分析器抛出 404

php - 仅向从数据库中删除的用户发送电子邮件的问题

php - 使用 php/mysql 从表中获取统计数据的算法/查询

php - 如何使用php内置的http服务器+mysql?

javascript - 如何从 JS 文件中的 WP-Config.php 读取全局变量

javascript - PHP 和 MySQL : Update not working with Foreach Loop