为什么要压制PHP错误?

时间:2011-07-06 01:27:31

标签: php error-handling

我想知道为什么你会“抑制”PHP错误。我明显看到错误产生的额外警告线的区别,但抑制它是否好?

 Access denied for user 'user'@'localhost' (using password: YES) 

vs

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'user'@'localhost'       (using password: YES) in (deleted) on line 8
Access denied for user 'user'@'localhost' (using password: YES)

如果是这样,我应该养成在我的PHP程序中在MySQL查询开始时输入@的习惯吗?

1 个答案:

答案 0 :(得分:7)

你应该积极养成抑制错误的习惯。错误是有原因的。相反,在代码中正确和防御地处理它们,并不断完善代码,直到错误消失为止。

你应该做的事情如下:

$conn = mysql_connect($host, $user, $pass);

// Always test to see if your action/connection/whatever was successful
if (!$conn) {
  // something went wrong.  handle the error
  // Display a message for the user, write a message to `error_log()`, whatever's appropriate
}
else mysql_select_db($dbname);

在生产系统上,您永远不应该显示错误,因为它可能会泄露您的代码和数据库的详细信息。相反,在php.ini或运行时关闭display_errors

// In development and production, make sure all errors are reported
error_reporting(E_ALL & E_STRICT);

// In development show all errors on screen so you handle them as they occur
ini_set('display_errors', 1);

// In production turn them off
ini_set('display_errors', 0);

事实上,使用@进行错误抑制的次数是PHP不良做法的第二大投票in this classic question.