php - 功能 mcrypt_get_iv_size() 在 Laravel 5.5 和 php 7.1.11 上被弃用

标签 php laravel laravel-5 php-7 php-7.1

我已经将 laravel 5.3 升级到 laravel 5.5,我正在使用 php 7.1.11

升级时出现错误

ErrorException (E_ERROR) 函数 mcrypt_get_iv_size() 已弃用

config\app 我有

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

也尝试添加

error_reporting(E_ALL ^ 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);

这是我正在使用的代码。

最佳答案

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)

上述解决方案通常可用于“抑制”已弃用的警告。

旁注:$a ^ $b 在 PHP 中是 XOR 所以 error_reporting(E_ALL ^ E_DEPRECATED) 基本上等同于 error_reporting(E_ALL)

关于php - 功能 mcrypt_get_iv_size() 在 Laravel 5.5 和 php 7.1.11 上被弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47324443/

相关文章:

php - Laravel Socialite 扩展领域

variables - 如何在Laravel中将public内部的目录设置为类变量

php - 无法使用 PHP 从一个页面获取信息到另一个页面

php - Laravel - 如何传递数据以包含

javascript - 克隆时如何计算输入名称 [0] 到名称 [1]

php - Laravel Eloquent 区分大小写

javascript - AngularJS - 没有错误但没有 View

php - 如何从每个起始 alphabate 中获取查询结果 1 次

php - 从 cakephp 中的输入中删除多余的空格

mysql - 查询大表的问题