Как решить PHP 7.0 Polyfill: в вашей системе не установлено подходящего CSPRNG — paragonie / random_compat

Эта ошибка появляется из-за обновления paragonie/random_compat зависимость вашего проекта (или зависимость зависимости вашего проекта) от 1.5 или основной версии. Многие разработчики сталкивались с этой проблемой при работе с Laravel и Symfony (symfony/polyfill-php70). Проблема в основном, как показано в сообщении, в вашей системе нет обновленного PRNG, и вам нужно будет предоставить один.

Генератор псевдослучайных чисел (PRNG), также известный как генератор детерминированных случайных битов (DRBG), представляет собой алгоритм для генерации последовательности чисел, свойства которой аппроксимируют свойства последовательностей случайных чисел. Начиная с версии 1.3 библиотеки random_compat, автор библиотеки (paragonie) предупреждает об этой проблеме здесь.

Удалены openssl_random_pseudo_bytes() полностью. Если вы используете random_compat в PHP на Unix-подобной ОС, но не можете получить доступ /dev/urandom, версия 1.3+ скинет Exception, Если вы хотите доверять OpenSSL, не стесняйтесь писать собственный резервный код. (см. фрагмент решения № 3).

В этой статье мы предложим вам 3 возможных решения этой ошибки в вашем проекте.

Решение 1

Хотя вы не используете непосредственно эту библиотеку, добавьте ее в свой composer.json как зависимость. требовать random_compat с конкретной версией 1.4:

{
"require": {
"paragonie/random_compat": "~1.4"
},
}

Тогда беги composer install (или же composer-update если вы уже используете эту библиотеку) и попробуйте запустить свой проект снова. Если это не сработало, попробуйте понизить до 1.3, если это не сработает, то я надеюсь, что у вас есть права изменить настройки PHP на вашем сервере и перейти к следующему возможному решению.

Решение 2

Это решение, скорее всего, будет работать и может быть вашим спасением, если вы сможете изменить настройки PHP на своем сервере. Как упоминалось ранее, нам нужен доступ к urandom в нашем проекте, и мы должны предоставить его с помощью настроек PHP.

Вам нужно только добавить /dev/urandom к вашему существующему open_basedir свойство конфигурации.

В plesk вы можете легко решить эту задачу с помощью пользовательского интерфейса.

Откройте plesk, перейдите к своему домену и откройте настройки PHP.

Настройки PHP Plesk

Перейти к общим настройкам и сосредоточиться на open_basedir вариант.

Возможно, в этом входе уже есть значение по умолчанию, вам нужно только скопировать это значение и добавить следующую строку к существующему значению:

Заметка

Файлы в указанных каталогах могут быть доступны с помощью сценариев PHP. Для разделения каталогов используйте двоеточие (:) в Linux и точку с запятой (;) в Windows.

Как кажется, есть много людей, которые плохо читают:

  • Для серверов Linux (на основе UNIX): вам нужно добавить dev/urandom расширение с двоеточием (:) например :/dev/urandom
  • Для серверов Windows: вам нужно добавить dev/urandom с точкой с запятой (;), например ;/dev/urandom
#In linux use : (colon)
:/dev/urandom
# In windows use ; (semicolon)
;/dev/urandom

Пример этого решения на сервере Plesk с Ubuntu (Unix) можно увидеть на следующем рисунке:

Plesk manager open_basedir путь

Наконец сохраните изменения и попробуйте снова войти в свой проект. Если вы уверены, что добавили расширение urandom правильно и оно не работает, перейдите к последнему решению.

Решение 3

Если вы находитесь в этой точке, потому что ни одно из предыдущих возможных решений не сработало для вас, позвольте мне сказать вам, что вы спешите, потому что у вас не осталось слишком много вариантов. Поскольку ни один из предыдущих шагов не работал для вас, у вас остались только следующие параметры:

A. Понизить рейтинг вашего проекта

Если ваш проект уже работает и вы решили обновить фреймворк (Symfony или laravel и т. Д.), Вам придется понизить версию, поскольку вы не сможете обеспечить поддержку urandom (random_bytes функция).

Б. Напишите свой запасной вариант для random_bytes

Как мы уже упоминали, библиотека не полагается на openssl_random_pseudo_bytes функция больше и использует вместо random_bytes (функция, которая выдает исключение). Автор говорит в версии 1.3, Вы можете написать свой собственный запасной вариант для использования openss_random_pseudo_bytes снова, изменив библиотеку и создав оператор try и catch, где random_bytes используется:

Обратите внимание, что на платформах Windows, использующих PHP < 5.3.0, the function недоступно, поэтому вам нужно будет сделать еще один обходной путь с помощью элемента управления ActiveX CAPICOM. Хотя, вероятно, никто, кто использует PHP 5.3, никогда не столкнется с этим исключением (поскольку все современные проекты требуют более высокой версии PHP), Вы можете проверить этот фрагмент для получения дополнительной информации, если вы используете PHP < 5.3.0.

Повеселись !

Ссылка на основную публикацию
Adblock
detector