2012-05-08 37 views
0

如果有一个致命的错误 - 就像无法连接到数据库,然后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/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() 

如何避免这种情况? error_reportingphp.ini已被设置为0display_errors关闭。

+1

然后重新启动服务器并使用'phpinfo()'验证这些设置? –

+0

也许在某个地方有一个明确的debug_print_backtrace? – ShinTakezou

+0

不,我确定没有任何地方没有任何debug_print_backtrace – Siddharth

回答

1

确保在运行时或通过.htaccess在脚本启用display_errors

如果仍然无法正常工作,请确保您修改了正确的php.ini,并在做出任何更改后重新启动Apache/IIS/nginx。如果仍然失败,请加载一个phpinfo()并确保正在进行更改。另外,请务必关闭html_errors。以防万一脚本偷偷改变了你的error_reporting,并且它显示你的堆栈跟踪给公众。

+0

'html_errors'只控制错误消息是否应该包含带链接的HTML。它与这些错误无关或没有出现。 – rid

+0

@Radu正确,但在生产环境中使用它并不是好主意,至少在我看来。我将编辑我的评论以反映这一点,而不是解决实际问题。 – tcole

+0

在生产环境中首先出现错误*并不是一个好主意。他们应该被记录下来,不管有没有HTML,所以这是一个没有问题的问题。 – rid

-2

您可以在引发错误的函数之前使用“@”。

“@”会隐藏您的函数可能引发的任何php错误。

http://php.net/manual/en/language.operators.errorcontrol.php

+0

虽然这会起作用,但这不是一个好主意,因为你必须把它放在每个功能前面。 – Ahatius

+0

这基本上是在地毯下扫除问题。出现错误是因为某些错误,因此修复错误的根本原因比忽略错误要好得多。 – GordonM

+1

是的,我同意,但问题是关于防止PHP打印错误堆栈,而不是找到问题的解决方案。 – Anas

1

无论您正在编辑的错误的php.ini,或者设置被重新打开别的地方(.htaccess文件,用户级别的php.ini,或脚本在运行时)。请参阅phpinfo()来帮助您找到php.ini文件,对其进行编辑,然后重新启动。

您只需关闭display_errors即可。