【发布时间】:2010-12-31 13:11:01
【问题描述】:
我有一些 PHP 代码。当我运行它时,会出现一条警告消息。
如何删除/抑制/忽略这些警告消息?
【问题讨论】:
标签: php warnings error-reporting
我有一些 PHP 代码。当我运行它时,会出现一条警告消息。
如何删除/抑制/忽略这些警告消息?
【问题讨论】:
标签: php warnings error-reporting
您确实应该修复导致警告的任何原因,但您可以使用error_reporting() 控制错误的可见性。要跳过警告消息,您可以使用以下内容:
error_reporting(E_ERROR | E_PARSE);
【讨论】:
E_ALL ^ E_WARNING,启用除警告之外的所有错误报告,似乎是error_reporting 的更好参数选择。
E_ALL 设置了所有错误位(“on”),因此当您在它之后执行 ^ E_WARNING ,您正在翻转E_WARNING 的位,所以它“关闭”...
你可以在你的函数调用前面加上一个@ 来隐藏所有的错误信息。
@yourFunctionHere();
【讨论】:
dns_get_record 这样的一些函数会抛出警告。您的代码可能会补偿警告,但仍会抛出警告。关闭错误报告适用于生产服务器,但不适用于开发服务器。如果您正在生成 XML 内容,则警告将导致浏览器无法呈现,因为服务器正在发送由警告引起的格式错误的 XML。有时您希望在开发中使用它,但不是因为您已经补偿的临时 DNS 查找失败而导致的某些问题。
在启用所有其他错误报告的同时抑制警告:
error_reporting(E_ALL ^ E_WARNING);
【讨论】:
【讨论】:
如果您想在显示所有其他错误的同时抑制警告和其他一些错误类型(例如,通知),您可以这样做:
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
【讨论】:
在 Core Php 中隐藏警告消息集 error_reporting(0) 在常见包含文件或单个文件的顶部。
在 Wordpress 中 hide Warnings and Notices 在 wp-config.php 文件中添加以下代码
ini_set('log_errors','On');
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
【讨论】:
没有完全回答这个问题,但我认为在某些情况下这是一个更好的折衷方案:
由于第三方库中的 printf() 语句,我收到了一条警告消息。我确切地知道原因是什么——第三方修复了他们的代码时的临时解决方法。我同意不应禁止显示警告,但我无法在屏幕上弹出警告消息的情况下向客户展示我的工作。我的解决方案:
printf('<div style="display:none">');
...Third-party stuff here...
printf('</div>');
警告仍在页面源中提醒我,但对客户端不可见。
【讨论】:
ob_start() 和ob_end_clean()。这样,这些东西甚至不会被发送到浏览器(它在这里)。
我在我的 php.ini 中这样做:
error_reporting = E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
这仅记录致命错误,不记录警告。
【讨论】:
我认为更好的解决方案是配置 .htaccess 这样您就不必更改应用程序的代码。以下是 Apache2 的指令
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0
【讨论】:
您可以使用error_reporting 取消警告,但更好的方法是首先修复您的脚本。
如果您不知道如何操作,请编辑您的问题并向我们展示有问题的行和显示的警告。
【讨论】:
要忽略所有警告,请在代码顶部使用此示例:
error_reporting(0);
【讨论】:
Error Control Operator 已经有答案,但缺乏解释。您可以对每个表达式使用@ 运算符,它会隐藏错误(致命错误除外)。
@$test['test']; //PHP Notice: Undefined variable: test
@(14/0); // PHP Warning: Division by zero
//This is not working. You can't hide Fatal Errors this way.
@customFuntion(); // PHP Fatal error: Uncaught Error: Call to undefined function customFuntion()
对于调试,这是一种快速而完美的方法。但是你永远不应该在生产中使用它,也不应该永久包含在你的本地版本中。它会给你带来很多不必要的刺激。
您应该考虑:
1.接受的答案中提到的错误报告设置。
error_reporting(E_ERROR | E_PARSE);
或来自 PHP INI 设置
ini_set('display_errors','Off');
2.捕捉异常
try {
$var->method();
} catch (Error $e) {
// Handle error
echo $e->getMessage();
}
【讨论】:
注意:这是为了抑制警告,而不是致命错误
您可以使用 @ 运算符,这将隐藏除致命错误之外的所有警告,但请注意,添加 @ 运算符会增加脚本的执行时间
例如@function_name();
另一种方法是使用 .ini 配置文件并编辑 error_reporting 部分,如下编辑它将继续显示所有错误,但会抑制脚本中的任何警告
error_reporting(E_ALL ^ E_WARNING);
但是如果您需要在特定项目而不是整个服务器中抑制警告,那么下面的代码行就足够了
ini_set('error_reporting', E_ALL ^ E_WARNING);
【讨论】: