无法在random_bytes()Laravel PHP 7.0中打开源设备

时间:2017-06-06 06:24:48

标签: php laravel php-7

我访问了许多论坛,但我无法找到解决问题的最佳方案。 在laravel 5中,我有这个错误:

Cannot open source device in random_bytes() : 
Exception in Str.php line 243:
Cannot open source device
in Str.php line 243
at random_bytes('25') in Str.php line 243
at Str::randomBytes('25') in Str.php line 227
at Str::random('25') in Store.php line 197
at Store->generateSessionId() in Store.php line 173

str.php位于:httpdocs / vendor / laravel / framework / src / Illuminate / Support / Str.php at:

/**
 * Generate a more truly "random" alpha-numeric string.
 *
 * @param  int  $length
 * @return string
 */
public static function random($length = 16)
{
    $string = '';

    while (($len = strlen($string)) < $length) {
        $size = $length - $len;

        $bytes = static::randomBytes($size);

        $string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $size);
    }

    return $string;
}

/**
 * Generate a more truly "random" bytes.
 *
 * @param  int  $length
 * @return string
 */
public static function randomBytes($length = 16)
{
    return random_bytes($length);
}

我使用php 7.我也通过openssl_random_pseudo_bytes()更改了random_bytes,它的工作原理但是我有另一个错误,即框架无法为密码生成哈希值。所以我认为openssl_random_bytes不是最好的解决方案。

如果有人可以提供帮助。

由于

1 个答案:

答案 0 :(得分:0)

来自random_bytes documentation

  

此功能使用的随机源如下:

     
      
  • 在Windows上,将始终使用»CryptGenRandom()
  •   
  • 在Linux上,如果可用,将使用»getrandom(2)系统调用。
  •   
  • 在其他平台上,将使用/dev/urandom
  •   
  • 如果上述资源都不可用,则会抛出异常。
  •   

所以,你的案子是最后一个。这不是您的代码问题,而是服务器设置。环境是什么?托管,云,虚拟服务器,本地机?