PHP random_int(0,63):无法打开源设备

时间:2017-02-04 14:12:07

标签: php nextcloud

这个PHP代码:

<?php
    random_int(0,63);
?>

因此错误而失败:

  

致命错误:未捕获异常:无法在/usr/htdocs/rand.php:2中打开源设备

     

堆栈追踪:

#0 /usr/htdocs/rand.php(2):   在第2行的/usr/htdocs/rand.php中抛出random_int(0,2)

#1 {main}

由于此错误,我无法设置我的nextcloud服务器...请问有什么问题?

1 个答案:

答案 0 :(得分: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而不是bin2hexopenssl_random_pseudo_bytes。它需要编译Openssl库,这是一种规范。

请注意;上述函数返回二进制结果,您可以使用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 从十六进制转换为int。

示例:

$arr = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten');