【问题标题】:php hide ALL errorsphp隐藏所有错误
【发布时间】:2012-03-03 19:33:33
【问题描述】:

隐藏所有 php 错误的最佳做法是什么?因为我不希望向用户显示错误。

我尝试使用.htacess,将代码php_flag display_errors off 放在那里,但它返回给我500 error

还有其他方法可以隐藏所有错误吗?

【问题讨论】:

  • php_flag 仅在 PHP 作为 Apache 模块运行时才有效。如果您通过 CGI 或其他方式运行它,Apache 对该指令一无所知,因此会引发错误。

标签: php apache security


【解决方案1】:

根据 PHP 文档,将其放在 php 脚本的顶部:

<?php error_reporting(0); ?>

http://php.net/manual/en/function.error-reporting.php

如果您确实隐藏了错误(应该在实时环境中隐藏),请确保在某处记录任何错误。 How to log errors and warnings into a file? 否则,事情会出错,你会不知道为什么。

【讨论】:

    【解决方案2】:

    使用 PHP 错误处理函数来处理错误。你怎么做取决于你的需要。该系统将拦截所有错误并根据您的需要转发它或者如果您要求它这样做则抑制它

    http://php.net/manual/en/book.errorfunc.php

    【讨论】:

      【解决方案3】:

      最好的方法是以不会产生任何错误的方式构建您的脚本!当有东西可以创建通知或错误时,您的脚本以及变量和环境的检查有问题!

      如果你还是想隐藏它们:error_reporting(0);

      【讨论】:

      • 对于警告,我同意你的看法。对于通知,没有那么多。例如,如果没有定义$_POST['stuff'],PHP 喜欢向您发出通知。即使您希望它不是大部分时间,并且只是看看它是否存在并且真实。而isset($_POST['stuff']) &amp;&amp; $_POST['stuff'] 在大多数情况下过于冗长。 @$_POST['stuff'] 有效,但似乎每个人都认为这是邪恶的。
      • 我知道我的网站脚本可以正常工作并且没有错误,我只是这样做,如果某些东西“打嗝”或有人试图篡改它以使其导致错误它不会这样做。
      • @cHao 即使是isset-check 你也可以定义一个函数或方法;)
      • @TimWolla:嘘。因为我要去定义一个函数来检查这样简单的事情,在我抱怨〜30个字符太罗嗦之后。 :)
      【解决方案4】:

      在您的 php 文件中输入以下代码:

      error_reporting(0);
      

      这不会向用户报告任何错误。如果您愿意,请对此发表评论。

      【讨论】:

      • 是的..在脚本实际开始运行之前发生的任何错误(解析错误、语法错误)都不会被脚本启动后发生的调用隐藏。如果你真的想隐藏一切,你必须在php.ini 中设置error_reporting = 0。但坦率地说,如果您有语法错误,那么该代码无论如何都不应该出现在实时站点中——它永远无法工作——所以这无关紧要。
      • 或者只是有一个单独的文件来关闭error_reportingincludes 你的实际脚本。只要解析器不抱怨文件,即关闭error_reporting,你就可以了,即使包含文件的解析失败。
      • @Basti 虽然这在某种意义上是可行的,但您应该有一个基于更重要的事情的更强大的文件/文件夹/框架结构,而不是避免一个不应该永远不会发生的问题 被推出去生活,例如“来自愚蠢编码员的意外角色”。
      • @James:这真的取决于你如何处理错误。如果您的客户对较小的脚本有疑问,您始终可以仅为您的管理员帐户打开错误报告/显示错误并进行实时测试。但我同意大家的看法,最好在生产服务器的 php.ini 中关闭这些选项。
      【解决方案5】:

      隐藏所有错误:

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

      显示所有错误:

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

      【讨论】:

      • 我试过这个,它对我不起作用。知道还有哪些其他因素可以防止隐藏错误吗?
      【解决方案6】:

      仅对用户隐藏错误 但在 apache 日志中显示日志错误

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

      1 - 仅在日志中显示错误
      2 - 对用户隐藏

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-12
        • 2017-11-18
        • 1970-01-01
        • 2012-02-19
        • 1970-01-01
        • 2021-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多