仅为部分代码禁用PHP警告

时间:2017-08-14 10:09:18

标签: php warnings

要禁用PHP警告,您需要在php.ini中设置以下参数

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = On

display_errors = Off

上述方法将停用整个项目的警告。有没有办法 只禁用一段PHP代码 的警告,即禁用某些功能或几行代码的警告?

2 个答案:

答案 0 :(得分:9)

Yes ...

理想情况下,您需要修复这些错误(或者至少以正确的方式处理它们),因为它看起来像是糟糕的设计,但是您正在寻找的是错误控制操作符(@ )。

<?php
/* Intentional file error */
$my_file = @file('non_existent_file') or die("Failed opening file: error was '$php_errormsg'");

// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.
?>
  

注意:@ -operator仅适用于表达式。一个简单的经验法则是:如果你可以获取某些东西的值,你可以在它前面添加@运算符。例如,您可以将它添加到变量,函数和包含调用,常量等等。您不能将它添加到函数或类定义或条件结构(如if和foreach等)之前。

注意......

  

警告:目前,“@”错误控制操作符前缀甚至会禁用错误报告,以解决将终止脚本执行的严重错误。除此之外,这意味着如果你使用“@”来抑制来自某个函数的错误,并且它不可用或者输入错误,那么脚本就会在那里死亡而没有任何关于原因的指示。

答案 1 :(得分:1)

首先 - 压迫E_DEPRECATEDE_STRICT似乎不是一个好的解决方案 - 下一次PHP升级会破坏您的代码。应用此应该只是一个临时修复,直到您修复错误。

您有多种方法可以解决错误/警告。

  1. 使用@-operator抑制单个语句的错误。可以像这样使用:$content = @file_get_contents('some-url-which-is-maybe-not-available..');

  2. 取消错误,直到您想要使用error_reporting还原错误。这样做就像设置其他ini值一样。

  3. 一个例子是

    $oldlevel = error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
    // some code ...
    // revert it
    error_reporting($oldlevel);
    

    您应该记住,您不能删除文件的几行的编译时/解析器错误/警告。如果在包含错误级别之前更改错误级别,则只能将其应用于整个文件。