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

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

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


当前回答

我用这样的方法解决了我的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页面,如下所示。

完成:)

其他回答

除了上面的许多很好的答案,你还可以在你的项目中实现以下两个功能。它们将在应用程序/脚本退出之前捕捉每个非语法错误。 在函数内部,您可以进行回溯和日志,或向公众呈现令人愉快的“网站正在维护”消息。

致命错误:

register_shutdown_function

http://php.net/manual/en/function.register-shutdown-function.php

错误:

set_error_handler

http://php.net/manual/en/function.set-error-handler.php

回溯:

debug_backtrace

http://php.net/manual/en/function.debug-backtrace.php

如果错误是在PHP代码中,您可以在代码中使用error_reporting()函数来设置为报告所有。

但是,这并不能处理PHP崩溃的情况。这方面的信息只能在服务器日志中找到。也许你无法访问这些,但我合作过的许多托管提供商都有某种方式让你访问它。例如,我最喜欢的方法是在.php所在的当前目录中创建error_log文件。尝试在那里搜索或联系您的主机提供商。

你需要从PHP中获取有用错误的两行关键代码是:

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

正如其他贡献者所指出的那样,出于安全原因,这些功能在默认情况下是关闭的。作为一个有用的技巧——当你设置你的网站时,为你的不同环境做一个切换是很方便的,这样在你的本地和开发环境中,这些错误默认是打开的。这可以通过以下代码实现(理想情况下是在index.php或配置文件中,这样从一开始就处于活动状态):

switch($_SERVER['SERVER_NAME'])
{
    // local
    case 'yourdomain.dev':
    // dev
    case 'dev.yourdomain.com':
        ini_set('display_errors',1);
        error_reporting(E_ALL);
    break;
    //live
    case 'yourdomain.com':
        //...
    break;
}
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
ini_set('html_errors', 1);

此外,使用xdebug可以获得更详细的信息。

如果你是一个ubuntu用户,那么在你的终端上运行这个命令

sudo tail -50f /var/log/apache2/error.log

它将显示最近的50个错误。 apache2有一个错误文件error.log,用来记录所有错误。