未定义变量:Laravel 5.3 中的 _ENV
Undefined variable: _ENV in Laravel 5.3
我正在用 Laravel 5.3 测试我的系统:
过去几周我的系统运行良好。从上周末开始,我遇到了同样的错误 TWICE 如下:-
Notice: Undefined variable: _ENV in C:\NewFolder\htdocs\project\vendor\vlucas\phpdotenv\src\Loader.php on line 303
Warning: array_key_exists() expects parameter 2 to be array, null given in C:\NewFolder\htdocs\project\vendor\vlucas\phpdotenv\src\Loader.php on line 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
但是还是没能恢复正常
有人知道为什么会这样吗?谢谢
我使用的版本:
- OS: Window 7
- 浏览器:火狐浏览器
- PHP: 7.1.1
- Laravel: 5.3
不应该定义 $_ENV
超级全局的唯一原因是它是否已从 variables_order
配置中删除。
检查 php.ini
(或任何其他相关配置文件)是否有 variables_order
属性。要设置 $_ENV
,它 必须 包含一个 "E"。默认设置为
variables_order = "EGPCS"
如果您在查找配置时遇到问题,<?php phpinfo() ?>
转储还应该显示值和配置文件位置。
variables_order
是一个PHP_INI_PERDIR
模式设置,意思是...
Entry can be set in php.ini, .htaccess, httpd.conf or .user.ini (since PHP 5.3)
字符代表
- E -
$_ENV
- G -
$_GET
- P -
$_POST
- C -
$_COOKIE
- S -
$_SERVER
经过一些查找和研究,我发现 Github #8191 也有一些类似的问题。
我可以通过 运行 php artisan config:cache
消除错误。意味着 Laravel 将从配置文件中读取环境变量,而不是直接从 .env
中读取环境变量
这显然是您的代码范围之外的错误;这是您的依赖项或系统配置的更改。您应该考虑重建依赖项缓存,并回滚到错误开始日期之前的旧版本依赖项。
正如@MahdiYounesi 所说,从 phpdotenv
依赖项开始。
老问题,但在 2021 年发现了同样的错误并解决了:
在Laravel 7
中使用https://github.com/lazychaser/laravel-nestedset
解决方法:
在您的 blade 模板中代替 @foreach
使用:
@php
foreach(){}
@endphp
我正在用 Laravel 5.3 测试我的系统:
过去几周我的系统运行良好。从上周末开始,我遇到了同样的错误 TWICE 如下:-
Notice: Undefined variable: _ENV in C:\NewFolder\htdocs\project\vendor\vlucas\phpdotenv\src\Loader.php on line 303
Warning: array_key_exists() expects parameter 2 to be array, null given in C:\NewFolder\htdocs\project\vendor\vlucas\phpdotenv\src\Loader.php on line 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
但是还是没能恢复正常
有人知道为什么会这样吗?谢谢
我使用的版本:
- OS: Window 7
- 浏览器:火狐浏览器
- PHP: 7.1.1
- Laravel: 5.3
不应该定义 $_ENV
超级全局的唯一原因是它是否已从 variables_order
配置中删除。
检查 php.ini
(或任何其他相关配置文件)是否有 variables_order
属性。要设置 $_ENV
,它 必须 包含一个 "E"。默认设置为
variables_order = "EGPCS"
如果您在查找配置时遇到问题,<?php phpinfo() ?>
转储还应该显示值和配置文件位置。
variables_order
是一个PHP_INI_PERDIR
模式设置,意思是...
Entry can be set in php.ini, .htaccess, httpd.conf or .user.ini (since PHP 5.3)
字符代表
- E -
$_ENV
- G -
$_GET
- P -
$_POST
- C -
$_COOKIE
- S -
$_SERVER
经过一些查找和研究,我发现 Github #8191 也有一些类似的问题。
我可以通过 运行 php artisan config:cache
消除错误。意味着 Laravel 将从配置文件中读取环境变量,而不是直接从 .env
这显然是您的代码范围之外的错误;这是您的依赖项或系统配置的更改。您应该考虑重建依赖项缓存,并回滚到错误开始日期之前的旧版本依赖项。
正如@MahdiYounesi 所说,从 phpdotenv
依赖项开始。
老问题,但在 2021 年发现了同样的错误并解决了:
在Laravel 7
中使用https://github.com/lazychaser/laravel-nestedset解决方法:
在您的 blade 模板中代替 @foreach
使用:
@php
foreach(){}
@endphp