Неопределенная переменная: ENV в Laravel 5.3


Я тестировал свою систему с Laravel 5.3:

В течение последних нескольких недель моя система работала нормально. С прошлых выходных я дважды сталкивался с одной и той же ошибкой , как показано ниже:-

Примечание: Неопределенная переменная: _ENV в C:\NewFolder\htdocs\project\vendor\vlucas\phpdotenv\src\Loader.php в строке 303

Предупреждение: array_key_exists() ожидает, что параметр 2 будет массивом, значение null задано в C:\NewFolder\htdocs\project\vendor\vlucas\phpdotenv\src\Loader.php в режиме онлайн 303

Loader.php:

public function getEnvironmentVariable($name)
{
    switch (true) {
        case array_key_exists($name, $_ENV): // line 303 here
            return $_ENV[$name];
        case array_key_exists($name, $_SERVER):
            return $_SERVER[$name];
        default:
            $value = getenv($name);
            return $value === false ? null : $value;
    }
}

. env

APP_ENV=local
APP_KEY=base64:oTU0Ok1mmE6x0qEosGKhCSxpQLAlBAnNreH7sFAKkdM=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=new_db
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_KEY=
PUSHER_SECRET=
PUSHER_APP_ID=
  • Когда вышеуказанная ошибка появилась в первый раз (когда я загрузил страницу входа в систему), я очистил кэш и историю браузера, системе удалось вернуться в нормальное состояние.
  • Когда та же ошибка появилась во второй раз (в середине процесса тестирования), я сделал то же самое, что и в первый раз, очистил кэш браузера и историю, но это не помогло, ошибка все еще отображается после того, как я обновил свой браузер. Поэтому я казнил php artisan view:clear и php artisan cache:clear, но все еще не смогли вернуться к нормальной жизни.

У кого-нибудь есть какие-либо идеи о том, почему это происходит? Спасибо

Версия, которую я использовал:

  • ОПЕРАЦИОННАЯ система: Окно 7
  • Браузер: Mozilla Firefox
  • PHP: 7.1.1
  • Ларавель: 5.3
Author: yyii, 2018-02-01

3 answers

Единственная причина, по которой $_ENV суперглобальный не должен быть определен, заключается в том, что он был удален из variables_order конфигурация.

Проверьте свой php.ini (или любые другие соответствующие файлы конфигурации) на наличие свойства variables_order. Чтобы $_ENV был установлен, он должен включать "E". Значение по умолчанию равно

variables_order = "EGPCS"

Если у вас возникли проблемы с поиском конфигурации, дамп <?php phpinfo() ?> также должен отображать расположение значений и файлов конфигурации.

variables_order является PHP_INI_PERDIR настройка режима, то есть...

Запись может быть установлена в php.ini, . htaccess-процесс, httpd.conf или .user.ini (начиная с PHP 5.3)

Символы обозначают

  • Е - $_ENV
  • Г - $_GET
  • П - $_POST
  • С - $_COOKIE
  • С - $_SERVER
 3
Author: Phil, 2018-02-01 05:33:49

После некоторых поисков и исследований я обнаружил, что есть некоторые похожие проблемы с Github #8191.

Я смог избавиться от ошибки, запустив php artisan config:cache. Означает, что Laravel будет считывать переменную среды из файла конфигурации, а не считывать переменную среды непосредственно из .env

 0
Author: yyii, 2018-02-09 02:28:22

Это явно ошибка, выходящая за рамки вашего кода; это изменение ваших зависимостей или конфигурации вашей системы. Вам следует подумать о перестройке кэша зависимостей и откате к старой версии зависимостей до даты начала ошибки.

Как сказал @Mahdiyounesi, начните с зависимости phpdotenv.

 0
Author: New Alexandria, 2018-02-11 15:34:31