当MySQLi,例如不可用时,我正在为mysql_
函数制作自定义包装,当它无法连接时,它会抛出异常。然而,致命的错误输出是:
致命错误:未捕获的异常' exception '伴有消息'Failed to连接数据库。在
C:'Program Files (x86)'Apache Software Foundation'Apache2.2'htdocs'MiniTicket'database.php
: 16
堆栈跟踪:
# 0C:'Program Files (x86)'Apache Software Foundation'Apache2.2'htdocs'MiniTicket'database.php
(49):MySQL->__construct('localhost', 'miniticket', 'mtu:r!Nj@~qR6f9...')
#1C:'Program Files (x86)'Apache Software Foundation'Apache2.2'htdocs'MiniTicket'index.php
(3):require_once('C:'Program File...')
#2 {main}抛出C:'程序Files (x86)'Apache SoftwareFoundation'Apache2.2'htdocs'MiniTicket'database.php online 16
可以看到,我的数据库密码被清楚地显示给每个人看。不好的。我不想关闭这些消息,特别是在开发过程中,但我也不想显示敏感信息。使用set_error_handler
也不是一个很好的解决方案,因为我必须解析所有内容,这很容易出错。
所以…是否有一种简单的方法可以禁用参数在错误消息中的函数中的显示,最好是通过PHP而不是在一些配置文件中?
编辑:禁用除了文件名以外的文件路径也是一个额外的好处。
您应该在生产和开发之间分离错误处理,其中开发显示错误信息,生产显示友好的错误消息,但不输出PHP所做的任何事情。将输出记录到file。
编辑php.ini并设置
display_errors = 0
如果你不能访问php.ini,那么你需要在你的脚本顶部添加:
ini_set("display_errors", "0");
参见http://php.net/manual/en/errorfunc.configuration.php和http://php.net/manual/en/function.error-reporting.php
这将阻止所有错误输出到浏览器,并且可能只应该在您的生产系统上完成。确保你仍然在记录错误(通过php.ini设置)。
我不知道为什么这不是默认配置,以便在生产环境中不会发生这种情况。
不要将此视为解决您的软件问题的方法,这只是为了阻止敏感数据被显示给公众。
请注意,您可能需要重新启动Apache才能使php.ini更改生效。