关于apache:不显示PHP错误

Not displaying PHP errors

本问题已经有最佳答案,请猛点这里访问。

我已经把这个问题归结为问题并使其变得干净,以便你能更方便地帮助我。

我有一个非常简单的代码:

1
2
3
<?php
echo"Hello world";
?>

这完全没问题。

如果我运行以下代码(解析错误)我没有收到任何错误,但仍显示文本"Hello world":

1
2
3
4
<?php
echo"Hello world";
piwejfoiwjefoijwef
?>

如果我在代码之前放置解析错误但是不显示"Hello world":

1
2
3
4
<?php
piwejfoiwjefoijwef
echo"Hello world";
?>

当我打印phpinfo(在同一个文件中,同一目录)时,我有以下设置:
display_errors开
display_startup_errors开
error_reporting 1

如果我还尝试在脚本中设置错误报告并使用以下代码运行它,我仍然没有收到任何错误或警告,但显示文本"Hello world":

1
2
3
4
5
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE); ini_set('display_errors', '1');
echo"Hello world";
owieufpowiejf
?>

我的php.ini文件具有以下值(我已重新启动Apache):

1
2
3
error_reporting = E_ERROR & ~E_DEPRECATED
display_errors = On
display_startup_errors = On

我在Amazon AMI上使用64位AWS EC2运行Apache / PHP / MySQL。我不熟悉服务器配置。当我转换到亚马逊服务器时,错误开始了。除了错误报告,服务器和Apache / PHP运行完美。

请指导我如何解决问题。

谢谢!


这是一个通知。

揭示它。

我使用的代码:

1
2
3
4
5
6
7
<?php

    error_reporting(E_ALL); ini_set('display_errors', '1');
    echo"Hello world";
    owieufpowiejf

?>

输出:

Hello world

Notice: Use of undefined constant owieufpowiejf - assumed 'owieufpowiejf' in /code/14B4LY on line 5

那是因为它不是解析错误,它认为它是一个常量并试图将其解析为字符串。放置普通字符串是一个有效的语句。


你可以尝试error_reporting(-1)

-1是error_reporting可以采用的最大值,并且始终为。


我有这个问题并通过编辑/etc/php.ini来修复它以显示display_errors = On


在主目录中创建.htaccess文件并放置:

1
2
3
php_flag display_errors on
# 7 stands for E_ERROR | E_WARNING | E_PARSE
php_value error_reporting 7

error_reporting常量的确切值可以在官方文档http://php.net/manual/en/errorfunc.constants.php中找到。

当然,您应该在服务器中启用mod_rewrite。


在PHP脚本中尝试将error_reporting设置为E_ALL并查看是否收到通知..

查看文档:http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting


在包含语法错误的同一脚本中调用error_reporting()永远不会起作用。

1
2
3
4
<?php
echo"Hello world";
piwejfoiwjefoijwef
?>

特别是此脚本不会出现任何语法错误,因为它不包含任何语法错误。它只是一个echo语句和第二行中的一个常量常量。在?>之前可以省略尾随分号

如果没有关闭,你会收到通知。同样,您没有在其他测试中启用E_NOTICE