Неопределенная переменная: 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
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
После некоторых поисков и исследований я обнаружил, что есть некоторые похожие проблемы с Github #8191.
Я смог избавиться от ошибки, запустив php artisan config:cache
. Означает, что Laravel будет считывать переменную среды из файла конфигурации, а не считывать переменную среды непосредственно из .env
Это явно ошибка, выходящая за рамки вашего кода; это изменение ваших зависимостей или конфигурации вашей системы. Вам следует подумать о перестройке кэша зависимостей и откате к старой версии зависимостей до даты начала ошибки.
Как сказал @Mahdiyounesi, начните с зависимости phpdotenv
.