我经常会尝试运行PHP脚本,然后得到一个空白屏幕。没有错误信息;只有一个空屏幕。原因可能是一个简单的语法错误(错误的括号,缺少分号),或者函数调用失败,或者完全是其他原因。

很难找出哪里出了问题。我最终注释掉了代码,到处输入“echo”语句,等等,试图缩小问题的范围。但肯定有更好的办法,对吧?

是否有一种方法可以让PHP像Java那样产生有用的错误消息?


当前回答

您可以在要调试的文件中包含以下行:

error_reporting(E_ALL);
ini_set('display_errors', '1');

这将覆盖PHP .ini中的默认设置,这只会使PHP向日志报告错误。

其他回答

在页面顶部选择一个参数

error_reporting(E_ERROR | E_WARNING | E_PARSE);

尝试在实际的php文件中设置错误报告级别。或者,像其他人建议的那样,检查你的服务器设置——可能是php.ini中的一些东西,或者是关于你的主机的一些限制。不要仅仅依赖于。htaccess。此外,在排除故障时,print_r任何您认为可疑的变量。

我总是在php脚本的最顶部使用这种语法。

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off

我推荐Nette Tracy来更好地可视化PHP中的错误和异常:

除了这里所有精彩的答案,我还想特别提一下MySQLi和PDO库。

为了……

总是看到数据库相关的错误,和 避免检查方法的返回类型以查看是否出现了错误

最好的选择是将库配置为抛出异常。

MySQLi

将此添加到脚本顶部附近

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

最好放在使用新的mysqli()或mysqli_connect()之前。

PDO

在连接实例上将PDO::ATTR_ERRMODE属性设置为PDO::ERRMODE_EXCEPTION。你可以在构造函数中这样做

$pdo = new PDO('driver:host=localhost;...', 'username', 'password', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);

或者在创造之后

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);