43

我正在尝试关闭我网站上的所有错误。我已经按照不同的教程来了解如何做到这一点,但我一直在阅读和打开错误消息。有什么我想念的吗?

我在我的php.ini文件中尝试了以下内容:

;Error display
display_startup_errors = Off
display_errors = Off
html_errors = Off
docref_root = 0
docref_ext = 0

出于某种原因,当我对不存在的文件执行 fileopen() 调用时,仍然会显示错误。出于显而易见的原因,这对于实时网站来说是不安全的。

4

12 回答 12

34

我总是在配置文件中使用这样的东西:

// Toggle this to change the setting
define('DEBUG', true);

// You want all errors to be triggered
error_reporting(E_ALL);

if(DEBUG == true)
{
    // You're developing, so you want all errors to be shown
    display_errors(true);

    // Logging is usually overkill during development
    log_errors(false);
}
else
{
    // You don't want to display errors on a production environment
    display_errors(false);

    // You definitely want to log any occurring
    log_errors(true);
}

这允许在调试设置之间轻松切换。您可以通过检查代码在哪个服务器上运行(开发、测试、验收和生产)来进一步改进这一点,并相应地更改您的设置。

请注意,如果 error_reporting 设置为 0,则不会记录任何错误,正如 Korri 巧妙地指出的那样。

于 2013-04-11T12:59:40.627 回答
29

您应该考虑不显示错误消息!

在您的 PHP 代码中设置ini_set('display_errors', 'Off');(或直接在您的 ini 文件中,如果可能的话),并保留 error_reportingE_ALL或您希望在日志中找到的任何类型的消息。

这样您就可以在以后处理错误,而您的用户仍然看不到它们。

完整示例:

define('DEBUG', true);
error_reporting(E_ALL);

if (DEBUG)
{
    ini_set('display_errors', 'On');
}
else
{
    ini_set('display_errors', 'Off');
}

或者简单地说(同样的效果):

define('DEBUG', true);

error_reporting(E_ALL);
ini_set('display_errors', DEBUG ? 'On' : 'Off');
于 2014-02-11T10:52:26.767 回答
13

php.ini中,注释掉:

error_reporting = E_ALL & ~E_NOTICE
error_reporting = E_ALL & ~E_NOTICE | E_STRICT
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ER… _ERROR
error_reporting = E_ALL & ~E_NOTICE

;通过在它前面放置一个(即,like ;error_reporting = E_ALL & ~E_NOTICE

要在单个文件中禁用error_reporting(0);,请在打开php标签后放置。

于 2013-04-11T13:01:25.340 回答
9

在文件php.ini中,您应该对所有错误尝试此操作:

error_reporting = off
于 2014-04-01T15:45:35.370 回答
5

让我快速总结一下以供参考:

  • error_reporting()调整默认错误处理程序的当前活动设置。

  • 编辑错误报告 ini 选项也会更改默认值。

    • 在这里,必须编辑正确 php.ini的版本——它通常/etc/php5/fpm/php.ini在现代服务器上,/etc/php5/mod_php/php.ini或者;而 CLI 版本有一个不同的版本。

    • 或者,您可以根据 SAPI 使用:

      • mod_php:.htaccessphp_flag选项
      • FastCGI:通常是本地的php.ini
      • 并且 PHP 5.3 以上也是一个.user.ini

    • 像往常一样重新启动网络服务器。

如果您的代码笨拙,并且在运行时以某种方式在其他地方重置了这些选项,那么另一种快速的方法是定义一个自定义错误处理程序,它只会消除所有通知/警告/错误:

set_error_handler(function(){});

同样,这是不可取的,只是一种替代方法。

于 2014-07-30T01:16:00.057 回答
4

在文件php.ini中,您应该对所有错误尝试此操作:

display_errors = On

位置文件是:

  • Ubuntu 16.04:/etc/php/7.0/apache2
  • CentOS 7:/etc/php.ini
于 2015-03-10T04:26:18.177 回答
3

你也可以使用 PHP 的error_reporting();

// Disable it all for current call
error_reporting(0);

如果你只想忽略一个函数的错误,你可以在前面加上一个@符号。

@any_function(); // Errors are ignored
于 2013-04-11T12:54:47.437 回答
2

如果关闭则关闭:

您可以在 fileopen() 前面使用error_reporting();放置一个 @ 。

于 2013-04-11T13:00:28.353 回答
1

我通常使用 PHP 内置的错误处理程序,它可以处理语法之外的所有可能错误,并且仍然呈现一个不错的“停机维护”页面,否则:

在生产服务器上格式化 PHP 错误

于 2015-03-10T04:33:01.043 回答
0

已经有一段时间了,我确信 OP 的答案已被清除。如果任何新用户仍在寻找答案并滚动到这里,那么就是这样。

检查 php.ini 文件中的更新信息

使用 Windows 资源管理器:

C/xampp/php/php.ini

使用 XAMPP 控制面板

  1. 单击“Apache”的配置按钮(停止 | 管理员 | 配置 | 日志)
  2. 选择 PHP (php.ini)

我可以创建自己的 phpinfo() 吗?是的你可以

  1. 直接在你的根目录或任何你想要的地方创建一个 phpinfo.php
  2. 放置这个<?php phpinfo(); ?>
  3. 保存文件。
  4. 打开文件,您应该会看到所有详细信息。

如何在不使用 php.ini 的情况下在我自己的文件display_errors中设置Off

您可以使用ini_set()函数来执行此操作。在此处阅读有关 ini_set() 的更多信息(https://www.php.net/manual/en/function.ini-set.php

  1. 转到您的 header.php 或 index.php
  2. 添加此代码ini_set('display_errors', FALSE);

在不访问 php.ini 文件的情况下检查输出

$displayErrors = (ini_get('display_errors') == 1) ? 'On' : 'Off';
$PHPCore = array(
    'Display error' => $displayErrors
    // add other details for more output
);
foreach ($PHPCore as $key => $value) {
    echo "$key: $value";
}
于 2020-07-30T23:50:25.433 回答
0

打开您的 php.ini 文件(如果您使用的是 Linux - sudo vim /etc/php5/apache2/php.ini)

将此行添加到该文件中

   error_reporting = E_ALL & ~E_WARNING 

(如果您需要禁用任何其他错误 -> error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE & ~E_WARNING

    display_errors = On

最后你需要重启你的 APACHE 服务器。

于 2016-01-05T09:26:52.707 回答
0

在 PHP fpm 的情况下是不够的。这是另一个可以启用的配置文件display_error。你应该找到www.conf。在我的情况下,它位于目录/etc/php/7.1/fpm/pool.d/

您应该找到php_flag[display_errors] = on并禁用它,php_flag[display_errors] = off. 这应该可以解决问题。

于 2019-01-25T16:55:52.047 回答