要禁用PHP警告,您需要在php.ini中设置以下参数
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = On
或
display_errors = Off
上述方法将停用整个项目的警告。有没有办法 只禁用一段PHP代码 的警告,即禁用某些功能或几行代码的警告?
答案 0 :(得分:9)
理想情况下,您需要修复这些错误(或者至少以正确的方式处理它们),因为它看起来像是糟糕的设计,但是您正在寻找的是错误控制操作符(@
)。
<?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_DEPRECATED
和E_STRICT
似乎不是一个好的解决方案 - 下一次PHP升级会破坏您的代码。应用此应该只是一个临时修复,直到您修复错误。
您有多种方法可以解决错误/警告。
使用@
-operator抑制单个语句的错误。可以像这样使用:$content = @file_get_contents('some-url-which-is-maybe-not-available..');
取消错误,直到您想要使用error_reporting
还原错误。这样做就像设置其他ini值一样。
一个例子是
$oldlevel = error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
// some code ...
// revert it
error_reporting($oldlevel);
您应该记住,您不能删除文件的几行的编译时/解析器错误/警告。如果在包含错误级别之前更改错误级别,则只能将其应用于整个文件。