我检查了我的PHP ini文件(PHP.ini),并设置了display_errors,错误报告也是E_ALL。我已重新启动Apache Web服务器。

我甚至把这些行放在了脚本的顶部,它甚至不能捕捉到简单的解析错误。例如,我用“$”声明变量,而不关闭语句“;”。但我的所有脚本都显示了这些错误的空白页面,但我希望在浏览器输出中看到这些错误。

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

还有什么要做?


当前回答

在index.php文件中设置:

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

其他回答

如果尽管遵循了以上所有答案(或者您无法编辑php.ini文件),但仍然无法收到错误消息,请尝试创建一个新的php文件来启用错误报告,然后将问题文件包括在内。如:

error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('problem_file.php');

尽管在php.ini文件中正确设置了所有内容,但这是我唯一能够捕获名称空间错误的方法。我的确切设想是:

//file1.php
namespace a\b;
class x {
    ...
}

//file2.php
namespace c\d;
use c\d\x; //Dies because it's not sure which 'x' class to use
class x {
    ...
}

在php文件所在的文件夹中创建一个名为php.ini的文件。

在php.ini中添加以下代码(我给出了一个显示代码的简单错误):

display_errors = on

display_startup_errors = on

这将起作用:

<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>

警告:以下答案事实上不正确。错误处理中没有任何更改,未捕获的异常与其他错误一样显示。建议的方法必须谨慎使用,因为它无条件地输出错误,尽管设置了display_error,并且可能会通过向现场的局外人透露敏感信息而构成威胁。

您可能会发现“错误报告”或“显示错误”的所有设置在PHP7中似乎都不起作用。这是因为错误处理已更改。请尝试以下操作:

try{
     // Your code
} 
catch(Error $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

或者,要一次性捕获异常和错误(这与PHP5不向后兼容):

try{
     // Your code
} 
catch(Throwable $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

如果您正在执行SharedHosting计划(如hostgator)。。。简单地添加

php_flag display_errors 1

插入.htaccess文件并将其上载到远程文件夹可能不会产生服务器上生成的实际警告/错误。

您还需要编辑php.ini

这是通过cPanel(在hostgator共享主机上测试)实现的计划)

登录cPanel后,搜索MultiPHP INI编辑器。它通常位于cPanel项目列表中的“软件”部分。

在MultiPHP INI编辑器页面上。。。您可以停留在基本模式选项卡上,只需选中行中显示displayerrors的按钮。然后单击应用按钮保存。

重要事项:只需记住在完成调试时将其关闭;因为这不建议用于公共服务器。