不显示PHP错误

时间:2011-10-05 20:12:23

标签: php apache apache2 error-reporting

我已经解决了这个问题,并将其清理干净,以便您能够更轻松地帮助我。

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

<?php
echo "Hello world";
?>

这完全没问题。

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

<?php
echo "Hello world";
piwejfoiwjefoijwef
?>

如果我将解析错误放在代码之前,但不显示“Hello world”:

<?php
piwejfoiwjefoijwef
echo "Hello world";
?>

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

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

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

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

error_reporting = E_ERROR & ~E_DEPRECATED
display_errors = On
display_startup_errors = On

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

请指导我如何解决问题。

谢谢!

6 个答案:

答案 0 :(得分:15)

这是一个通知。

error_reporting(E_ALL);

揭示它。

我使用的代码:

<?php

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

?>

输出:

  

Hello world

     

注意:使用未定义的常量owieufpowiejf - 假设第5行/ code / 14B4LY中的'owieufpowiejf'

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

答案 1 :(得分:3)

您可以尝试error_reporting(-1)

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

答案 2 :(得分:2)

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

error_reporting(E_ALL)

查看文档:{​​{3}}

答案 3 :(得分:2)

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

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。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

<?php
echo "Hello world";
piwejfoiwjefoijwef
?>

此脚本特别不会出现任何语法错误,因为它不包含任何语法错误。它只是一个echo语句和第二行中的一个常量。在?>

之前可以省略尾随分号

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