php 中的静音E_DEPRECATED

Silence E_DEPRECATED in php

提问人:Daniel Hornik 提问时间:11/8/2017 更新时间:11/8/2017 访问量:3635

问:

我在 php 中禁用 show deprecated 错误有一个问题。 在我的项目中,使用了很多不推荐使用的功能。这是一个非常大的项目,所以我目前不能用未弃用的这个替换这个函数。

对于此函数:正在抛出错误 ErrorException,并显示消息“函数 mcrypt_create_iv() 已弃用”。 mcrypt_create_iv

如何禁用它? 我尝试了很多方法,这不是仅在error_reporting == 0时才抛出。

当错误报告是:

error_reporting(E_ALL ^ (E_DEPRECATED | E_USER_DEPRECATED | E_NOTICE | E_STRICT  | E_CORE_ERROR | E_PARSE | E_USER_NOTICE | E_RECOVERABLE_ERROR | E_WARNING | E_USER_WARNING | E_USER_ERROR | E_COMPILE_WARNING | E_CORE_WARNING | E_ERROR));

每个人都在工作,但是如果我只删除一个标志,我会在屏幕上看到错误。

你知道什么想法吗?

我正在使用 PHP 7.1:

PHP 7.1.10 (cli) (built: Oct 10 2017 01:30:46) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.10, Copyright (c) 1999-2017, by Zend Technologies
PHP 异常 已弃用错误 报告

评论

4赞 node_modules 11/8/2017
我建议您不要忽略已弃用的警告,因为这表明您正在使用的功能将来将被删除。
0赞 Richard Tyler Miles 1/24/2023
请注意,您在这里执行的是按位数学运算,将其设置为 0 将同样禁用所有错误并且速度更快。

答:

0赞 jaswrks 11/8/2017 #1

首先,你的 error_reporting() 配置对我来说似乎有点奇怪。您正在启用,但随后删除了所有内容?似乎最好只列出您想看的内容,而不是排除所有内容。这可能是它如此敏感的原因之一。E_ALL

其次,最好将错误报告保留为打开状态,并调整其他与错误相关的设置。使错误仅在日志文件中可见,以供您查看。请参见:http://php.net/manual/en/errorfunc.configuration.php

error_reporting=E_ALL
display_errors=no
log_errors=yes
error_log=/var/log/php/errors.log

最后,如果所有其他方法都失败,您可以使用 @ 抑制来避免此警告。不过,这不是一个好主意,因为您会忘记这个问题的存在,并且最终在PHP的未来版本中,随着这个已弃用的函数被删除,这将完全中断。此外,通过抑制错误,您可能会错过比弃用警告更重要的其他问题。

@mcrypt_create_iv(...); // Suppress errors.
// Last-ditch, last resort. Refrain from using.

http://php.net/manual/en/migration71.deprecated.php

mcrypt 扩展已经废弃了近十年,使用起来也相当复杂。因此,它已被弃用,取而代之的是 OpenSSL,它将在 PHP 7.2 中从核心中删除并进入 PECL。

评论

0赞 Daniel Hornik 11/8/2017
是的,我仅为测试启用了E_ALL并禁用了所有。
0赞 Sammitch 11/8/2017
@将禁止该调用可能引发的任何错误消息,而不仅仅是弃用通知。真是个坏主意。
2赞 lucifurious 6/2/2018
在 7.0 中,转义函数不会禁止弃用警告。@