【问题标题】:Function mcrypt_get_iv_size() is deprecated on Laravel 5.5 and php 7.1.11函数 mcrypt_get_iv_size() 在 Laravel 5.5 和 php 7.1.11 上已弃用
【发布时间】:2018-04-29 16:24:27
【问题描述】:

我已将 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);

到它,但仍然出现错误。

$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);

这是我正在使用的代码。

【问题讨论】:

  • 是的,从 PHP 7.1.0 开始,该功能已被弃用,因为您 can see here,因此您可以更改它并使用其他东西来实现相同的目标。
  • 它可以在 7.0 上运行吗? @JulienLachal
  • 什么是替代品?
  • 另类是一个命题或情况,提供在两个或多个事物之间进行选择,其中只有一个可以选择
  • 是的,它可以在 7.0 上运行,但正如文档所说,你真的不应该这样做。它已被弃用是有原因的。

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


【解决方案1】:

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)

【讨论】:

    【解决方案2】:

    你可以检查一下 https://github.com/laravel/framework/issues/16329 要么 https://github.com/laravel/framework/issues/16884(我的问题通过这个链接解决了 - 对于 Laravel 4.2)

    【讨论】:

      猜你喜欢
      • 2017-07-19
      • 2017-06-20
      • 2018-01-02
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 2013-08-22
      • 2020-04-20
      • 1970-01-01
      相关资源
      最近更新 更多