33

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

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);
?>

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

4

7 回答 7

14

你所拥有的是一个解析错误。这些是在执行任何代码之前抛出的。PHP 文件需要完整解析,然后才能执行其中的任何代码。如果您设置错误级别的文件中存在解析错误,则在引发错误时它们不会生效。

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

于 2012-04-10T05:37:43.613 回答
13

您需要在 .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
于 2012-04-10T05:34:38.543 回答
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 页面,它将显示来自您选择测试的页面的解析错误。

于 2016-08-10T21:19:06.583 回答
2

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

ini_set('display_errors','on');
于 2015-01-03T08:28:59.823 回答
1

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

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

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

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

最好的,恕我直言是PHP 代码检查器

我复制所有源代码,粘贴到主框中,然后单击Analyze按钮。

这不是最实用的方法,但两个程序相辅相成,完全解决了问题

于 2018-02-10T00:07:30.617 回答
0

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

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

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

于 2014-08-08T14:07:43.120 回答
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

希望能帮助到你。

于 2017-03-20T03:01:04.767 回答