Этот код 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 из-за этой ошибки … В чем проблема, пожалуйста?
От 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
Других решений пока нет …