这个 PHP 代码:
<?php
random_int(0,63);
?>
失败并出现此错误:
致命错误:未捕获的异常:无法在 /usr/htdocs/rand.php:2 中打开源设备
堆栈跟踪:
#0 /usr/htdocs/rand.php(2): random_int(0, 2)
#1 {main} 在第 2 行的 /usr/htdocs/rand.php 中抛出
由于这个错误,我无法设置我的 nextcloud 服务器...请问有什么问题?
从https://secure.php.net/manual/en/function.random-int.php:
此函数使用的随机性来源如下:
- 在 Windows 上,总是使用 » CryptGenRandom()。
- 在 Linux 上,如果可用,将使用 » getrandom(2) 系统调用。
- 在其他平台上,将使用 /dev/urandom。
- 如果上述来源均不可用,则会抛出异常。
关于列表中的算法:
在您的托管情况下,如果可用,则没有,因此Exception
会抛出一个(我以前从未见过,这可能意味着您的托管服务提供商不是很好)。
您可以使用的,以及我推荐的random_int
,而不是openssl_random_pseudo_bytes。它需要编译 Openssl 库,这是一种规范。
笔记; 上述函数返回二进制结果,您可以使用 轻松将其转换为十六进制bin2hex
,或使用 将十六进制转换为 int hexdec
。
例子:
$int = hexdec(bin2hex(openssl_random_pseudo_bytes(1, $strong))); // 1 byte int
$int = hexdec(bin2hex(openssl_random_pseudo_bytes(2, $strong))); // 2 byte int