php 运行 thereis,如何解决PHP 7.0 Polyfill:There is no suitable CSPRNG installed on your system - paragonie...

本文概述

由于将项目的paragonie / random_compat依赖项(或项目的依赖项的依赖项)升级到1.5或主要版本而出现此错误。许多开发人员在使用Laravel和Symfony(symfony / polyfill-php70)时都遇到了这个问题。基本上是问题所在, 如消息中所示, 你的系统上没有更新的PRNG, 你需要提供一个。

伪随机数生成器(PRNG), 也称为确定性随机位生成器(DRBG), 是一种用于生成数字序列的算法, 该数字序列的性质近似于随机数序列的性质。从random_compat库的1.3版开始, 库作者(paragonie)在此警告有关此问题的信息。

完全删除了openssl_random_pseudo_bytes()。如果你在类似Unix的OS上的PHP中使用random_compat, 但无法访问/ dev / urandom, 则1.3+版将引发Exception。如果你想信任OpenSSL, 请随时编写自己的后备代码。 (请参阅解决方案3中的代码段)。

在本文中, 我们将为你的项目中的此错误提供3种可能的解决方案。

解决方案1

尽管你没有直接使用此库, 但是将其作为依赖项添加到composer.json中。需要使用特定版本1.4的random_compat:

{

"require": {

"paragonie/random_compat": "~1.4"

}, }

然后运行composer install(如果已经在使用此库, 则运行composer-update), 然后尝试再次运行项目。如果不起作用, 请尝试降级到1.3, 如果两者都不起作用, 那么我希望你有权修改服务器中的PHP设置并转到下一个可能的解决方案。

解决方案2

如果你能够更改服务器中的PHP设置, 则该解决方案最有可能起作用, 并且可能是你的救星。如前所述, 我们需要在项目中访问urandom, 并且需要使用PHP设置提供它。

你只需要将/ dev / urandom附加到现有的open_basedir配置属性中。

在plesk中, 你可以使用UI轻松完成此任务。

打开plesk, 导航到你的域, 然后打开PHP设置。

d84d97b574d481e63bb28f80ae8492a7.png

转到常规设置, 然后专注于open_basedir选项。

可能在该输入中已经有一个默认值, 你只需要复制该值并将以下字符串附加到现有值即可:

注意

可以通过PHP脚本访问指定目录中的文件。要分隔目录, 请在Linux上使用冒号(:), 在Windows上使用分号(;)。

似乎有很多人的阅读不佳:

对于Linux(基于UNIX)服务器:你需要在dev / urandom扩展名后加上冒号(:), 例如:: / dev / urandom

对于Windows Servers:你需要在dev / urandom后面附加一个分号(;), 例如;; / dev / urandom

#In linux use : (colon)

:/dev/urandom

# In windows use ; (semicolon)

;/dev/urandom

你可以在下图中看到在具有Ubuntu(Unix)的Plesk服务器上该解决方案的示例:

0d16de14fd0ec462b2ae238d201e266a.png

最后保存你的更改, 然后尝试再次进入你的项目。如果你确定正确添加了urandom扩展名, 但该扩展名不起作用, 请继续执行最后一个解决方案。

解决方案3

如果你因为目前为止没有任何可行的解决方案对你有用, 那么让我告诉你你很着急, 因为你没有太多选择。由于前面的步骤都没有对你有用, 因此你只剩下以下选项:

A.降级你的项目

如果你的项目已经在工作, 并且你决定更新框架(Symfony或laravel等), 那么你将需要降级, 因为你将无法提供对urandom的支持(random_bytes函数)。

B.为random_bytes编写自己的后备

如前所述, 该库不再依赖openssl_random_pseudo_bytes函数, 而是使用random_bytes(引发异常的函数)。作者说, 在1.3发行版中, 你可以编写自己的后备代码, 以通过修改库并在使用random_bytes的地方创建一条try和catch语句来再次使用openss_random_pseudo_bytes:

try {

$bytes = random_bytes(32);

} catch (Exception $ex) {

$strong = false;

$bytes = openssl_random_pseudo_bytes(32, $strong);

if (!$strong) {

throw $ex;

}

}

请注意, 在使用PHP <5.3.0的Windows平台上, 该函数openssl_random_pseudo_bytes不可用, 因此你将需要使用CAPICOM ActiveX控件进行另一种解决方法。尽管使用PHP 5.3的人可能永远也不会遇到这种异常(因为所有现代项目都需要更高版本的PHP), 但是如果你使用的是PHP <5.3.0, 则可以查看此代码段以获取更多信息。

玩得开心 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
eventsource-polyfill.js是一个用于支持EventSource API的JavaScript库。EventSource API是HTML5中定义的一种浏览器与服务器之间实现服务器发送事件的机制。 EventSource API允许服务器以文本格式发送事件到浏览器,而无需浏览器通过轮询或长轮询等方式不停地发送请求。浏览器可以通过注册事件处理程序来监听这些事件,并根据需要进行操作。 eventsource-polyfill.js的作用就是为不支持原生EventSource API的浏览器提供兼容性支持。它实现了EventSource API的核心功能,并在不支持原生EventSource API的浏览器中模拟这一功能。 使用eventsource-polyfill.js可以使得旧版本的浏览器也能够使用EventSource API,从而实现服务器发送事件到浏览器的实时更新。这对于一些需要实时更新数据的应用场景非常有用,比如实时聊天、实时股票行情等。 eventsource-polyfill.js的主要功能包括连接服务器、接收事件数据、处理事件类型以及处理错误等。它可以通过建立一个与服务器的长连接,并监听服务器发送的事件数据。当有新的事件数据到达时,它会触发相应的事件并将数据传递给注册的事件处理程序。 总之,eventsource-polyfill.js是一个用于兼容旧版本浏览器的JavaScript库,为不支持原生EventSource API的浏览器提供了实现服务器发送事件机制的功能。它使得开发人员可以使用统一的代码来处理浏览器与服务器之间的实时数据传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值