当前位置:  开发笔记 > 编程语言 > 正文

Random RuntimeException:唯一支持的密码是AES-128-CBC和AES-256-CBC,密钥长度正确

如何解决《RandomRuntimeException:唯一支持的密码是AES-128-CBC和AES-256-CBC,密钥长度正确》经验,为你挑选了1个好方法。



1> patricus..:

在多线程Web服务器上使用线程安全版本的PHP而不是多进程Web服务器时会出现此问题.您可以在此处阅读有关Github问题的更多问题,Github问题以及此处的PHP错误报告.还有一些链接,但它们只是从我发布的那几个链接分支出来的.

基本要点是,使用多线程Web服务器,您只需一个处理多个线程的进程.但是,putenv()/ getenv()methods不是线程安全的,并且在进程级别更改环境变量,因此该进程下的所有线程都会受到影响.

所以,你最终得到这样的东西:(如本期所述):

Request 1: {starts --- loads env --- work --- finishes}
Request 2:                             {starts ----- loads env --- work --- finishes}

因此,请求1进入,加载环境,并开始工作.当请求1正在工作时,请求2进入并在另一个线程上启动.在请求2读取环境变量之前,请求1完成并且PHP清除所有设置的变量putenv().现在,请求2尝试读取环境,但得到null因为变量在请求1完成时被清除.

可以通过两种方式缓解此问题:

    不要.env在生产中使用文件.直接设置环境变量,并禁用phpdotenv.包本身也提出了这一点:

    phpdotenv适用于开发环境,通常不应用于生产环境.在生产中,应该设置实际的环境变量,以便在每个请求上加载.env文件没有开销.

    切勿在env()配置文件之外使用该方法,并确保缓存配置文件.通过使用此方法,环境将被读取一次:创建配置文件缓存时.每个实际的Web请求都将从缓存中读取数据,并且永远不会再次触摸环境变量.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有