在PHP中沉默E_DEPRECATED

时间:2017-11-07 18:15:53

标签: php exception deprecated error-reporting

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

对于此功能: mcrypt_create_iv 抛出错误ErrorException,消息“函数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));

everythink正在运行,但如果我只删除一个标志,我可以在屏幕上看到错误。

你知道吗?

我正在使用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

1 个答案:

答案 0 :(得分:0)

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

其次,最好留下错误报告并调整other error-related settings。这样做只会在日志文件中显示错误以供审核。请参阅: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

最后,如果所有其他方法都失败了,您可以使用@ suppression来避免此警告。这不是一个好主意,因为你会忘记这个问题存在,并最终在未来的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。