无法更改display_errors值

时间:2019-01-15 01:05:43

标签: php

我无法关闭我的网站的display errors。我使用 ISP Manager 控制面板。所有php.ini文件和设置中的 Off 均关闭。但是仍然显示警告和通知。即使在脚本中直接使用ini_set()也不起作用。你能帮我吗?

<?php

ini_set('display_errors', 0);
phpinfo(); // display_errors is still On On

ini_get('display_errors'); // returns 'stderr'

2 个答案:

答案 0 :(得分:2)

如果我正确理解,类似:

var_dump(ini_set('display_errors', 0));

…产生:

bool(false)

我可以想到两种方法来有意防止更改display_errors

  1. Disabling ini_set()放在系统范围的INI文件中,该文件会产生不同的症状:

    Warning: ini_set() has been disabled for security reasons
    NULL
    

    无论如何都可以检查:

    var_dump(ini_get('disable_functions'));
    
  2. 在Apache设置中使用php_admin_flag硬编码display_errors,仅当PHP作为Apache模块运行但有效地产生布尔值false时才适用。

我相信我们在#2中。您可能需要检查whether PHP runs as Apache module;我不知道有任何方法可以自己验证是否正在使用php_admin_flag。如果是这样,我认为您不走运:

  

php_admin_flag名称为开|关

     

用于设置布尔配置指令。这不能用在   .htaccess个文件。使用php_admin_flag 设置的任何指令类型都可以   不会被.htaccessini_set()覆盖

如果您可以控制Apache设置,则可以轻松解决。否则,建议您向主机托管服务寻求支持。恕我直言,在生产服务器中启用display_errors是不合理的,更不用说强制了:

  

;此指令控制是否以及PHP将在何处输出错误,
  ;注意和警告。 错误输出在开发过程中非常有用,但是
  ; 在生产环境中可能非常危险。取决于代码
  ;触发错误,敏感信息可能会泄漏
  ;超出您的应用程序(例如数据库用户名和密码)或更差的地址。
  ;对于生产环境,我们建议记录错误而不是
  ;将它们发送到STDOUT。
  ;可能的值:
  ;关=不显示任何错误
  ; stderr =向STDERR显示错误(仅影响CGI / CLI二进制文件!)
  ; On或stdout =向STDOUT显示错误
  ;默认值:开
  ;开发价值:论
  ;产值:关
  ; http://php.net/display-errors

答案 1 :(得分:0)

概述

PHP中有几种不同类型的错误报告功能。幸运的是,我们在PHP docs here中对它们做了不错的解释。

我通常在以下示例中使用这三个。让我们来看看这些。

故障诊断文档

此功能设置错误报告级别。

error_reporting()

  

error_reporting()函数将error_reporting指令设置为   运行。 PHP具有许多错误级别,使用此函数集可以   脚本持续时间(运行时)的级别。如果可选级别   没有设置,error_reporting()只会返回当前错误   报告级别。

第一个函数采用整数或命名常量的参数。如果将来的PHP版本发布新的错误级别,建议使用命名常量。这样一来,您将永远知道升级到更新版本的PHP后会发生什么。

此下一个模式决定是否将错误打印到屏幕上。

ini_set('display_errors', 1)
  

这确定是否应将错误作为一部分打印到屏幕上   输出或是否应该对用户隐藏它们。

最后一个处理在PHP启动序列期间发生的错误。当您打开display_errors时,它不会处理启动顺序中发生的错误。这部分是为什么很多时候人们不理解为什么即使打开了错误报告也看不到错误的原因。

  

即使打开display_errors,PHP启动期间也会发生错误   不显示顺序。强烈建议保留   display_startup_errors关闭,调试除外。

这将告诉应用程序将错误记录到服务器。

ini_set('log_errors', 1);
  

告诉脚本错误消息是否应记录到服务器的   错误日志或error_log。因此,此选项是特定于服务器的。

示例

要关闭文件中的错误报告,请尝试此

ini_set('display_errors', 0);
ini_set('display_startup_errors', 0);
error_reporting(0);

要打开文件中的错误报告,请尝试此

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

答案

如果您想记录错误但不希望它们显示在屏幕上,那么您需要这样做,

ini_set('display_errors', 0); ini_set('display_startup_errors', 0); error_reporting(E_ALL);

或者尝试

ini_set('display_errors', 0); ini_set('display_startup_errors', 0); ini_set("log_errors", 1); error_reporting(E_ALL);