nextcloud — PHP random_int (0,63): не удается открыть устройство с исходным кодом

Этот код PHP:

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

не удается с этой ошибкой:

Неустранимая ошибка: Uncaught Exception: невозможно открыть устройство с исходным кодом в /usr/htdocs/rand.php:2

Трассировки стека:

# 0 /usr/htdocs/rand.php(2):
random_int (0, 2)

# 1 {main} добавлено в /usr/htdocs/rand.php в строке 2

Я не могу настроить свой сервер nextcloud из-за этой ошибки … В чем проблема, пожалуйста?

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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]