在Laravel 5.5和php 7.1.11上,函数mcrypt_get_iv_size()已经被弃用。

4

我将laravel 5.3升级到了laravel 5.5,并且使用php 7.1.11

在升级时,我遇到了错误

ErrorException (E_ERROR) Function mcrypt_get_iv_size() is deprecated

config\app中,我有以下内容

'cipher' => 'AES-256-CBC'

也可以尝试添加以下内容。
error_reporting(E_ALL ^ E_DEPRECATED);

我正在尝试进行IT技术方面的操作,但仍然遇到错误。

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, self::$skey, $text, MCRYPT_MODE_ECB, $iv);

这是我使用它的代码。


1
是的,自PHP 7.1.0起,该函数已被弃用,您可以在此处查看(http://php.net/manual/ro/function.mcrypt-get-iv-size.php),因此您可以更改它并使用其他方法来实现相同的目标。 - Julien Lachal
它能在7.0上运行吗?@JulienLachal - Jay
1
什么是替代方案? - Jay
1
替代方案是一种提供在两个或更多事物之间进行选择的情况或建议,只能选择其中一个。 - Amarnasan
是的,它可以在7.0上运行,但正如文档所说,你真的不应该这样做。它已经被弃用了,有其原因。 - Edwin
2个回答

0

Laravel在5.3中删除了所有的mcrypt代码(自Laravel 5.1以来默认未使用),因此我认为这是OP自己的代码。

理想情况下,此代码应迁移到OpenSSL,但在此之前,可以进行如下包装:

$olderrorReporting = error_reporting();
error_reporting($olderrorReporting&(~E_DEPRECATED));
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, self::$skey, $text, MCRYPT_MODE_ECB, $iv);
error_reporting($olderrorReporting)

以上解决方案可以用于一般情况下“抑制”过时警告。
附注:在PHP中$a ^ $b表示异或,因此error_reporting(E_ALL ^ E_DEPRECATED)基本等同于error_reporting(E_ALL)

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接