3

mysql_当 MySQLi 不可用时,我正在为函数制作自定义包装器,当它无法连接时,它会引发异常。但是,致命错误输出是这样的:

致命错误:未捕获的异常“异常”,消息“无法连接到数据库”。在C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php:16

堆栈跟踪:

#0 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php(49): MySQL->__construct('localhost', 'miniticket', 'mtu:r!Nj@~qR6f9...')
#1 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\index.php(3): require_once('C:\Program File...')
#2 {main} 在C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php上抛出第16

如您所见,我的数据库密码清晰地显示给大家看。不好。我不想关闭这些消息,尤其是在开发中,但我也不希望显示敏感信息。usingset_error_handler也不是一个很好的解决方案,因为我必须解析所有内容,这很容易出错。

那么......有没有一种简单的方法可以在错误消息中禁用函数中参数的显示,最好是通过 PHP 而不是在某些配置文件中?

编辑:禁用除文件名之外的文件路径也将是一个奖励。

4

2 回答 2

1

您应该在生产和开发之间分离错误处理,其中开发显示错误信息,生产显示友好的错误消息但不输出 PHP 所做的任何事情。而是将输出记录到文件中。

于 2011-12-05T04:23:29.357 回答
1

编辑你的 php.ini 并设置

display_errors = 0

如果您无权访问 php.ini,那么您需要在脚本顶部添加:

ini_set("display_errors", "0");

请参阅http://php.net/manual/en/errorfunc.configuration.phphttp://php.net/manual/en/function.error-reporting.php

这将阻止所有错误输出到浏览器,并且可能只应在您的生产系统上完成。确保您仍在记录错误(通过 php.ini 设置)。

我不确定为什么这不是默认配置,因此这种情况不会在生产环境中发生。

不过,不要将此视为解决您的软件问题的方法,这只是为了阻止敏感数据向公众展示。

请注意,您可能需要重新启动 Apache 才能使 php.ini 更改生效。

于 2011-12-05T04:46:13.930 回答