Почему Laravel не может получить доступ к переменным .env после четырех секунд загрузки

#laravel #soap #environment-variables #php-7.4

#laravel #soap #переменные среды #php-7.4

Вопрос:

Мой сайт Laravel использует SoapClient для доступа к другому сайту во время загрузки страницы (при этом выполняется около 6 секунд обработки данных перед вызовом soap.) Я заметил, что иногда SoapClient переключается в режим, отличный от wsdl, и процесс выдает ошибки. Я обнаружил, что это происходит потому, что SoapClient было передано значение NULL для его первого параметра конструктора (URI файла WSDL). Я подумал, что это странно, потому что это значение пришло непосредственно из файла .env. У сайта не было проблем с подключением к базе данных, поэтому файл .env должен был работать. Я настроил функцию, которая повторно обращается к переменным .env во время загрузки страницы, используя env(…) . Во время ошибки Soap я обнаружил, что примерно через четыре секунды сайт потерял доступ к переменным .env. До этого момента информация была доступна. После этого момента вызовы env() возвращали значение NULL . Это может быть связано с другим запросом страницы (возможно, повторные вызовы на ту же страницу, запрашивающие тот же процесс.) Кроме того, я только что обновил php до версии 7.4.13 (xampp с поддержкой 64-разрядных потоков: php-7.4.13-Win32-vc15-x64.) Кто-нибудь видел это раньше и есть способ решить эту проблему?

РЕДАКТИРОВАТЬ ====

SoapClient был создан в модели, и функция env() использовалась для доступа к переменным среды. Я узнал, что env() не следует использовать нигде, кроме файлов конфигурации. Это может объяснить мою проблему.

Ответ №1:

Я никогда не видел этой проблемы. Но подход может заключаться в том, чтобы загрузить переменную env в переменную конфигурации и использовать ее вместо этого. Например: создайте extra.php файл в каталоге конфигурации следующим образом:

 <?php

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

И используйте это так:

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

Надеюсь, это сработает.

Комментарии:

1. Я пошел с аналогичным исправлением. Я загрузил файл .env в $GLOBALS и оттуда получил доступ к переменным.