我访问了许多论坛,但我无法找到解决问题的最佳方案。 在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不是最好的解决方案。
如果有人可以提供帮助。
由于
答案 0 :(得分:0)
来自random_bytes
documentation:
此功能使用的随机源如下:
- 在Windows上,将始终使用»CryptGenRandom()。
- 在Linux上,如果可用,将使用»getrandom(2)系统调用。
- 在其他平台上,将使用
/dev/urandom
。- 如果上述资源都不可用,则会抛出异常。
所以,你的案子是最后一个。这不是您的代码问题,而是服务器设置。环境是什么?托管,云,虚拟服务器,本地机?