防止PHP打印错误堆栈

防止PHP打印错误堆栈,php,Php,如果出现致命错误,如无法连接到数据库,则PHP将在浏览器中打印错误堆栈,如下所示- mysql_pconnect() [<a href='function.mysql-pconnect'>function.mysql-pconnect</a>]: Lost connection to MySQL server at 'reading initial communication packet', system error: 111 #0 /var/www/platform

如果出现致命错误,如无法连接到数据库,则PHP将在浏览器中打印错误堆栈,如下所示-

mysql_pconnect() [<a href='function.mysql-pconnect'>function.mysql-pconnect</a>]: Lost connection to MySQL server at 'reading initial communication packet', system error: 111

#0 /var/www/platform/db/connection.php:12 mysql_pconnect('127.0.0.1','root','password')
#1 /var/www/platform/db/front_page.php:10 open_db_connection()
#2 /var/www/platform/services/front_page_services.php:7 find_top_courses()
#3 /var/www/platform/inc/main.php:75 get_top_courses()
#4 /var/www/index.php:198 F3::run()

我如何防止这种情况?php.ini中的错误报告已设置为0,显示错误将关闭。

确保在运行时或通过.htaccess时没有脚本启用显示错误

如果仍然不起作用,请确保修改了正确的php.ini,并在进行任何更改后重新启动Apache/IIS/nginx。如果仍然失败,请加载一个phpinfo并确保正在进行更改


此外,还要确保关闭html_错误。以防万一脚本潜行而过,更改了错误报告,并向公众显示了堆栈跟踪。

您可以使用@before函数引发错误

@将使函数可能引发的任何php错误静音


您可能编辑了错误的php.ini,或者在运行时脚本中的其他.htaccess文件(用户级别的php.ini)中重新打开了设置。请参阅phpinfo以帮助您找到php.ini文件,编辑它,然后重新启动


您只需关闭显示错误。

然后重新启动服务器并使用phpinfo验证这些设置?可能有明确的调试打印回溯?不,我确定没有任何调试打印回溯,也没有安装错误处理程序?谢谢。我发现了问题。这是框架代码中的一个错误处理程序——相当蹩脚。你能把你的评论作为一个答案,这样我就可以把它标记为正确的吗?html_错误只控制错误消息是否应该包含带有链接的html。这与错误是否显示无关。@Radu正确,但至少在我看来,在生产环境中使用它不是一个好主意。我将编辑我的评论以反映这一点,而不是解决实际问题。让错误首先出现在生产环境中不是一个好主意。它们应该被记录下来,不管有没有HTML,所以这不是问题。@Radu同意。但总有人打开某个东西进行调试,却忘记将其更改回原来的状态的可能性。这仅仅是在安全网的下方,X/Y需要首先发生。同样,这是基于我与多个团队合作的经验和我的观点。我的phphinfo显示display_错误和html_错误已关闭,但我仍然得到错误堆栈。这是否意味着它在某些脚本中被重置?虽然这会起作用,但这不是一个好主意,因为你必须将它放在每个函数前面。这基本上是在掩盖问题。错误的发生是因为某些错误,修复错误的根本原因比忽略它要好得多。是的,我同意,但问题是关于阻止PHP打印错误堆栈,而不是找到问题的解决方案。答案在形式上是正确的;使错误安静并不意味着避免处理它:我想用户应该检查函数的故障,不是吗?答案无助于确定错误出现的原因,而用户认为不应该。。。但是没有太多的线索,所以其他答案只是在争论什么可能是错误的:常识和赌注,而这是一个实际的解决方案,如果问题要迅速解决的话+1只是为了补偿不应得的-1