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

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

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


当前回答

您可以在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');

其他回答

有一个非常有用的扩展名为“xdebug”,它也会使您的报告更好。

我用这样的方法解决了我的500个问题:

A.检查php.ini参数

php.ini >> error_reporting = E_ALL | E_STRICT php.ini >> display_errors = On php.ini >> display_startup_errors =关闭

B.更新IIS管理器参数

IIS管理器>>错误页面>> 500 >>编辑功能设置>>详细错误

在这一步中,您将得到500个这样的错误,并且没有加载HTML。

IIS管理>> FastCGI设置>> php-cgi.exe >>标准错误模式>> IgnoreAndReurn200

在这一步中,您可以看到包含PHP错误的HTML页面,如下所示。

完成:)

对于快速,动手故障排除,我通常建议在这里SO:

error_reporting(~0); ini_set('display_errors', 1);

放在正在进行故障排除的脚本的开头。这并不完美,完美的变体是你也在PHP .ini中启用它,并在PHP中记录错误以捕捉语法和启动错误。

这里列出的设置显示所有错误、通知和警告,包括严格的错误,而不考虑使用哪个PHP版本。

接下来要考虑的事情:

安装Xdebug并在IDE中启用远程调试。

也可以看到:

错误报告(PHP正确方式) 预定义ConstantsDocs error_reporting()文档 display_errorsDocs

可以通过注册钩子来显示最后一个错误或警告。

function shutdown(){
  var_dump(error_get_last());
}

register_shutdown_function('shutdown');

将此代码添加到index.php的开头将有助于调试问题。

一些应用程序确实自己处理这些指令,通过调用这样的命令:

error_reporting(E_ALL & ~E_DEPRECATED); or error_reporting(0);

从而覆盖你的。htaccess设置。