PHP7.1 和 Laravel 5.3:函数 mcrypt_get_iv_size() 已弃用

PHP7.1 and Laravel 5.3: Function mcrypt_get_iv_size() is deprecated

我正在为我的所有项目使用 Laravel 5.0。昨天,我将我的 PHP 版本从 7.0.x 更新到了 7.1.0 版。更新后,我尝试打开我的 Laravel 项目并看到以下消息:

ErrorException in Encrypter.php line 303: 
Function mcrypt_get_iv_size() is deprecated

in Encrypter.php line 303
at HandleExceptions->handleError('8192', 'Function mcrypt_get_iv_size() is deprecated', 'C:\wamp64\www\project1\vendor\laravel\framework\src\Illuminate\Encryption\Encrypter.php', '303', array()) in Encrypter.php line 303

我可以知道如何解决这个问题吗?使用 Laravel 5.3 可以解决问题吗?我不想将我的 Laravel 更新到 5.3,因为这是一个巨大的项目,需要很长时间才能更新。这两个版本之间有太多的差异。需要修改大量代码

有没有更简单的方法来解决这个问题?

发生此错误是因为您的 config/app.php 文件中可能有 AES-256-CBC 以外的密码作为密码,这取决于 mcrypt 扩展名。也许您正在使用 MCRYPT_RIJNDAEL_256MCRYPT_RIJNDAEL_128?

如果不进行全面 Laravel 升级,您可以做的最好的事情是安装 legacy encrypter 并使用它来更新所有加密数据以使用 AES-256-CBC 密码,该密码具有自 Laravel 5.1 以来一直是默认密码,我相信。执行此操作后,您应该能够为您的 Laravel 应用程序使用 PHP 7.1。

在您的 config/app.php 配置文件中,您应该将密码更新为 "AES-256-CBC" 并将您的密钥设置为 随机 32 字节字符串 这可能是安全的使用 php artisan key:generate

生成

将此添加到 config/app.php 的开头:

error_reporting(E_ALL ^ E_DEPRECATED);

来源:

要解决这个问题,只需将 app.php 中的密码从 'MCRYPT_RIJNDAEL_128' 更改为 'AES-256-CBC'