我经常会尝试运行PHP脚本,然后得到一个空白屏幕。没有错误信息;只有一个空屏幕。原因可能是一个简单的语法错误(错误的括号,缺少分号),或者函数调用失败,或者完全是其他原因。
很难找出哪里出了问题。我最终注释掉了代码,到处输入“echo”语句,等等,试图缩小问题的范围。但肯定有更好的办法,对吧?
是否有一种方法可以让PHP像Java那样产生有用的错误消息?
我经常会尝试运行PHP脚本,然后得到一个空白屏幕。没有错误信息;只有一个空屏幕。原因可能是一个简单的语法错误(错误的括号,缺少分号),或者函数调用失败,或者完全是其他原因。
很难找出哪里出了问题。我最终注释掉了代码,到处输入“echo”语句,等等,试图缩小问题的范围。但肯定有更好的办法,对吧?
是否有一种方法可以让PHP像Java那样产生有用的错误消息?
当前回答
您可以在要调试的文件中包含以下行:
error_reporting(E_ALL);
ini_set('display_errors', '1');
这将覆盖PHP .ini中的默认设置,这只会使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);
“错误”是开发人员了解他们的错误并解决它们以使系统完美工作的最有用的东西。
PHP提供了一些更好的方法来了解开发人员为什么以及他们的代码在哪里出错,因此通过了解这些错误,开发人员可以在许多方面改进他们的代码。
最好的方法是在脚本顶部写以下两行来获得所有错误消息:
error_reporting(E_ALL);
ini_set("display_errors", 1);
在IDE中使用xdebug等调试器工具的另一种方法。
在页面顶部选择一个参数
error_reporting(E_ERROR | E_WARNING | E_PARSE);
我推荐Nette Tracy来更好地可视化PHP中的错误和异常:
要打开完整的错误报告,请在脚本中添加以下内容:
error_reporting(E_ALL);
这甚至会导致出现最小的警告。还有,以防万一:
ini_set('display_errors', '1');
将强制显示错误。这应该在生产服务器中关闭,但在开发时不可以。