我经常会尝试运行PHP脚本,然后得到一个空白屏幕。没有错误信息;只有一个空屏幕。原因可能是一个简单的语法错误(错误的括号,缺少分号),或者函数调用失败,或者完全是其他原因。
很难找出哪里出了问题。我最终注释掉了代码,到处输入“echo”语句,等等,试图缩小问题的范围。但肯定有更好的办法,对吧?
是否有一种方法可以让PHP像Java那样产生有用的错误消息?
我经常会尝试运行PHP脚本,然后得到一个空白屏幕。没有错误信息;只有一个空屏幕。原因可能是一个简单的语法错误(错误的括号,缺少分号),或者函数调用失败,或者完全是其他原因。
很难找出哪里出了问题。我最终注释掉了代码,到处输入“echo”语句,等等,试图缩小问题的范围。但肯定有更好的办法,对吧?
是否有一种方法可以让PHP像Java那样产生有用的错误消息?
当前回答
下面将启用所有错误:
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
请参见以下链接
http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors http://php.net/manual/en/errorfunc.configuration.php#ini.display-startup-errors http://php.net/manual/en/function.error-reporting.php
其他回答
你确定PHP实际上是从。htaccess中获取'display_errors'设置吗?检查phpinfo()函数的输出以确定。
此外,你应该检查以确保你没有使用'@',如果你使用了'@include…'或'@some_function(…)',在堆栈跟踪的某处。
您可能还想尝试使用PHPStorm作为代码编辑器。当您在编辑器中输入时,它会发现许多PHP和其他语法错误。
可以通过注册钩子来显示最后一个错误或警告。
function shutdown(){
var_dump(error_get_last());
}
register_shutdown_function('shutdown');
将此代码添加到index.php的开头将有助于调试问题。
您可以在PHP中注册自己的错误处理程序。例如,在这些模糊的情况下,将所有错误转储到一个文件可能会对您有所帮助。注意,无论当前error_reporting设置为什么,函数都会被调用。非常基本的例子:
function dump_error_to_file($errno, $errstr) {
file_put_contents('/tmp/php-errors', date('Y-m-d H:i:s - ') . $errstr, FILE_APPEND);
}
set_error_handler('dump_error_to_file');
对于快速,动手故障排除,我通常建议在这里SO:
error_reporting(~0); ini_set('display_errors', 1);
放在正在进行故障排除的脚本的开头。这并不完美,完美的变体是你也在PHP .ini中启用它,并在PHP中记录错误以捕捉语法和启动错误。
这里列出的设置显示所有错误、通知和警告,包括严格的错误,而不考虑使用哪个PHP版本。
接下来要考虑的事情:
安装Xdebug并在IDE中启用远程调试。
也可以看到:
错误报告(PHP正确方式) 预定义ConstantsDocs error_reporting()文档 display_errorsDocs