0

这个 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 服务器...请问有什么问题?

4

1 回答 1

0

https://secure.php.net/manual/en/function.random-int.php

此函数使用的随机性来源如下:

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

关于列表中的算法:

  • CryptGenRandom 是一种基于软件的伪随机算法
  • 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
于 2017-02-05T06:46:04.267 回答