如何让PHP显示错误? (我添加了ini_set和error_reporting,但只提供了500个错误)

时间:2012-04-10 05:30:48

标签: php html debugging

所以,我当前的网页上确实没有任何错误,但我希望能够在弹出时看到错误,而不是HTTP 500错误页面。我用Google搜索了一下,并认为添加这两行会解决所有问题。

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

注意:我无法访问php.ini文件,因为我正在使用学校帐户的服务器。

所以我在页面顶部介绍了一个错误(在$ buggy之后没有分号):

<?php 
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$buggy

$x = 4 + 2;
...

但是,我刚收到服务器错误:

“网站在检索http://mywebpage.com/时遇到错误。可能已关闭以进行维护或配置不正确。”

有什么想法吗?

编辑:

我已经重新配置了我的代码:

<?php 
include_once 'database/errorSettings.php';
?>
<?php 

$buggy // whoops
$x = 4 + 2;
...

errorSettings.php如下:

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

但它仍然不起作用......错误的重新配置方式?

7 个答案:

答案 0 :(得分:14)

你所拥有的是一个解析错误。在执行任何代码之前抛出这些。在执行任何代码之前,需要完整地解析PHP文件。如果您在文件中出现解析错误,并且您正在设置错误级别,那么在错误发生之前它们就不会生效。

将文件分成更小的部分,例如在一个文件中设置错误级别,然后include包含实际代码(和错误)的另一个文件,或者使用php在PHP之外设置错误级别。 ini或.htaccess指令。

答案 1 :(得分:12)

您需要在.htaccess文件中设置error_reporting值。由于存在解析错误,因此它永远不会在PHP代码中运行error_reporting()函数。

在.htaccess文件中尝试此操作(假设您可以使用):

php_flag display_errors 1
php_value error_reporting 30719

我认为30719对应于E_ALL,但我可能错了。

修改更新: http://php.net/manual/en/errorfunc.constants.php

int error_reporting ([ int $level ] )
---
32767   E_ALL (integer)     
All errors and warnings, as supported, except of   level E_STRICT prior to PHP 5.4.0.   32767 in PHP 5.4.x, 30719 in PHP 5.3.x, 6143 in PHP   5.2.x, 2047 previously

答案 2 :(得分:5)

添加到上面说的deceze。这是一个解析错误,因此为了调试解析错误,请在名为debugSyntax.php的根目录中创建一个新文件。把它放进去吧:

<?php

///////    SYNTAX ERROR CHECK    ////////////
error_reporting(E_ALL);
ini_set('display_errors','On');

//replace "pageToTest.php" with the file path that you want to test. 
include('pageToTest.php'); 

?>

运行debugSyntax.php页面,它将显示您选择测试的页面的解析错误。

答案 3 :(得分:2)

只需在PHP文件上编写以下代码:

ini_set('display_errors','on');

答案 4 :(得分:0)

使用PHP5.4和Plesk 11.5时遇到了这个问题

不知何故,Plesk域配置页面中的错误报告和显示错误设置完全覆盖了.htaccess或PHP脚本中的任何本地设置。我还没有找到防止这种情况发生的方法,因此请使用Plesk设置打开和关闭错误报告。

您的php.ini中可能有设置阻止本地站点覆盖这些设置,可能是由服务器上使用的控制面板强制执行的。

答案 5 :(得分:0)

给使用Codeigniter的人(我在C3上):

index.php文件覆盖了php.ini配置,所以在index.php文件中,第68行:

case 'development':
        error_reporting(-1);
        ini_set('display_errors', 1);
    break;

您可以更改此选项以设置所需内容。这是完整列表:

1   E_ERROR
2   E_WARNING
4   E_PARSE
8   E_NOTICE
16  E_CORE_ERROR
32  E_CORE_WARNING
64  E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024    E_USER_NOTICE
6143    E_ALL
2048    E_STRICT
4096    E_RECOVERABLE_ERROR

希望它有所帮助。

答案 6 :(得分:0)

在外部服务器中不容易检查语法错误,只是运行时错误。

我做什么?和你一样,我用

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

但是,在运行之前,我使用在线PHP语法检查器检查PHP文件中的语法错误。

最好的,恕我直言PHP Code Checker

我复制所有源代码,粘贴在主框内,然后点击Analyze按钮。

这不是最实用的方法,但这2个程序是互补的,它完全解决了这个问题