关闭显示错误PHP.ini

Jms*_*Bnd 37 php

我试图关闭我网站上的所有错误.我已经按照不同的教程来了解如何执行此操作,但我不断阅读并打开错误消息.有什么我想念的吗?我在php.ini文件中尝试了以下内容:

;Error display
display_startup_errors = Off
display_errors = Off
html_errors = Off
docref_root = 0
docref_ext = 0
Run Code Online (Sandbox Code Playgroud)

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

谢谢

She*_*ock 29

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

// 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 dev
    log_errors(false); 
}
else
{
    // you don't want to display errors on a prod environment
    display_errors(false); 
    // you definitely wanna log any occurring
    log_errors(true); 
}
Run Code Online (Sandbox Code Playgroud)

这样可以在调试设置之间轻松切换.您可以通过检查代码运行的服务器(开发,测试,验收,产品)并相应地更改您的设置来进一步改进.

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

  • 我是否缺少某些东西?或者“ display_errors”是否是某种自定义函数?我没有在手册中看到它(http://php.net/manual-lookup.php?pattern=display_errors)。 (2认同)

Lev*_*ite 24

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

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

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

完整示例:

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

if (DEBUG)
{
    ini_set('display_errors', 'On');        
}
else
{
    ini_set('display_errors', 'Off');
}
Run Code Online (Sandbox Code Playgroud)

或者简单(相同的效果):

define('DEBUG', true);

error_reporting(E_ALL);
ini_set('display_errors', DEBUG ? 'On' : 'Off');
Run Code Online (Sandbox Code Playgroud)

  • 除了一点但我认为最好将布尔值设置为"1"/"0",而不是"开启"/"关闭".原因很简单,当您使用`init_get()`读取值时,您将获得已设置的文字字符串.`'Off'`是一个非空字符串,其值为_True_. (4认同)
  • 这可能会更容易,因为人们可以只写 `if(ini_get('display_errors'))`(现在无论哪种方式都是正确的)。但实际上,我认为无论如何都不应该像这样进行检查!任何维护代码的人仍然可以将其设置为 `Off` 或 `No`(甚至是 `Foobar`(除了 `1`、`Yes` 和 `On` 都可以作为负值))。例如,安全检查可以是:`$val = strtolower(ini_get('display_errors')); if ($val == '1' || $val == 'on' || $val == 'yes') ...` 你仍然有一个非常有效的观点,恕我直言! (2认同)

Vis*_*nku 9

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
Run Code Online (Sandbox Code Playgroud)

放在它;前面(即像;error_reporting = E_ALL & ~E_NOTICE)

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


小智 8

在php.ini中你应该尝试这个所有错误

error_Reporting = off
Run Code Online (Sandbox Code Playgroud)


mar*_*rio 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(){});
Run Code Online (Sandbox Code Playgroud)

同样,这是不可取的,只是一种替代方案.