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

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

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

还有什么要做?


当前回答

为了显示解析错误,可以使用技巧:使用include,而不是在php.ini中设置display_errors。

以下是三段代码:

文件:tst1.php

<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
// Missing " and ;
echo "Testing

当直接运行此文件时,如果php.ini中将display_errors设置为0,它将不显示任何内容。

现在,试试这个:

文件:tst2.php

<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
include ("tst3.php");

文件:tst3.php

<?php
// Missing " and ;
echo "Testing

现在运行设置错误报告的tst2.php,然后包含tst3。您将看到:

分析错误:语法错误,意外的文件结尾,第4行tst3.php中需要变量(T_variable)或${(T_DOLLAR_OPEN_CURLY_BRACES)或{$(T_CURLY_OPEN)

其他回答

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

php_flag display_errors 1

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

您还需要编辑php.ini

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

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

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

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

我通常会在我的普通PHP项目中使用以下代码。

if(!defined('ENVIRONMENT')){
    define('ENVIRONMENT', 'DEVELOPMENT');
}

$base_url = null;

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'DEVELOPMENT':
            $base_url = 'http://localhost/product/';
            ini_set('display_errors', 1);
            ini_set('display_startup_errors', 1);
            error_reporting(E_ALL);
            break;

        case 'PRODUCTION':
            $base_url = 'Production URL'; /* https://google.com */
            error_reporting(E_ALL);
            ini_set('display_errors', 0);
            ini_set('display_startup_errors', 0);
            ini_set('log_errors', 1); // Mechanism to log errors
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}

这对我来说总是有效的:

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

然而,这并不能使PHP显示同一文件中发生的解析错误-显示这些错误的唯一方法是使用以下行修改PHP.ini:

display_errors = on

(如果您没有访问php.ini的权限,那么在.htaccess中输入这一行也可以):

php_flag display_errors 1

请注意,上述建议仅适用于开发环境。在实时站点上,display_errors必须设置为0,而log_errors设置为1。然后,您将能够在错误日志中看到所有错误。

在AJAX调用的情况下,在开发服务器上打开DevTools(F12),然后打开Network选项卡。然后启动您希望看到的结果的请求,它将显示在“网络”选项卡中。单击它,然后单击“响应”选项卡。在那里您将看到确切的输出。在实时服务器上,只需检查错误日志即可。

要显示所有错误,您需要:

1.在从浏览器(通常是index.PHP)调用的PHP脚本中包含以下行:

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

2.(a)确保此脚本没有语法错误

—or—

2.(b)在php.ini中设置display_errors=打开

否则,它甚至无法运行这两条线!

您可以通过运行(在命令行)检查脚本中的语法错误:

php -l index.php

如果包含另一个PHP脚本中的脚本,那么它将在包含的脚本中显示语法错误。例如:

索引php

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

// Any syntax errors here will result in a blank screen in the browser

include 'my_script.php';

my_script.php

adjfkj // This syntax error will be displayed in the browser

在Unix CLI中,只将错误重定向到文件是非常实用的:

./script 2> errors.log

在脚本中,可以像往常一样使用var_dump()或等效方法(STDOUT和STDERR都将接收输出),但只能在日志文件中写入:

fwrite(STDERR, "Debug infos\n"); // Write in errors.log^

然后从另一个shell中进行实时更改:

tail -f errors.log

或者干脆

watch cat errors.log