为什么 Laravel 在加载四秒后无法访问 .env 变量

Why can't Laravel access .env vars after four seconds of load time

我的 Laravel 站点在页面加载期间使用 SoapClient 访问另一个站点(在 soap 调用之前执行大约 6 秒的数据处理。)我注意到有时 SoapClient 切换到非 wsdl 模式并且处理错误。我发现发生这种情况是因为向 SoapClient 的第一个构造函数参数(WSDL 文件的 URI)传递了 NULL。我觉得这很奇怪,因为这个值直接来自 .env 文件。该站点连接到数据库没有问题,因此 .env 文件必须正常工作。我设置了一个函数,在页面加载期间使用 env(...) 重复访问 .env 变量。在 Soap 错误期间,我发现大约四秒标记时,该站点失去了对 .env 变量的访问权限。在那之前,信息是可以访问的。在那之后,对 env() 的调用返回 NULL。这可能与其他页面请求有关(可能重复调用同一页面,请求相同的进程。)另外,我刚刚将 php 升级到 7.4.13(xampp 支持 64 位线程:php-7.4.13-Win32-vc15-x64.) 有没有人以前见过这个,并且有办法解决这个问题?

编辑 ====

在模型中创建了 SoapClient,并使用 env() 函数访问环境变量。我了解到 env() 不应在配置文件以外的任何地方使用。这也许可以解释我的问题。

我没见过这个问题。但是一种方法可能是将 env 变量加载到配置变量中并使用它来代替。例如:在 config 目录中创建 extra.php 文件,如下所示:

<?php

return [
   'api_url' => env('API_URL'),
];

并像这样使用它:

config('extra.api_url');
// Instead of env('API_URL')

希望有用。