未定义变量:Laravel 5.3 中的 _ENV
Posted
技术标签:
【中文标题】未定义变量:Laravel 5.3 中的 _ENV【英文标题】:Undefined variable: _ENV in Laravel 5.3 【发布时间】:2018-07-11 08:49:02 【问题描述】:我正在使用 Laravel 5.3 测试我的系统:
在过去的几周里,我的系统运行良好。从上周末开始,我遇到了同样的错误TWICE,如下:-
注意:未定义变量:C:\NewFolder\htdocs\project\vendor\vlucas\phpdotenv\src\Loader.php 中第 303 行的 _ENV
警告:array_key_exists() 期望参数 2 为数组,在第 303 行的 C:\NewFolder\htdocs\project\vendor\vlucas\phpdotenv\src\Loader.php 中给出 null
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 Laravel:5.3【问题讨论】:
这很奇怪,it should be there 您是否尝试使用 composer update 更新您的应用? 运行:php artisan view:clear
@HirenGohel 很确定 OP 在第 2 点中说他们已经尝试过 php artisan view:clear
和 php artisan cache:clear
@Phil 是的,我的错。对不起!同意你的看法。
【参考方案1】:
老问题,但在 2021 年发现同样的错误并解决了:
在 Laravel 7 中使用 https://github.com/lazychaser/laravel-nestedset
解决方案:
而不是刀片模板中的@foreach
使用:
@php
foreach()
@endphp
【讨论】:
【参考方案2】:这显然是您代码范围之外的错误;这是您的依赖项或系统配置的更改。您应该考虑重建依赖项缓存,并回滚到错误开始日期之前的旧版本依赖项。
正如@MahdiYounesi 所说,从phpdotenv
依赖项开始。
【讨论】:
【参考方案3】:经过一番查找和研究,发现Github #8191有一些类似的问题。
我可以通过运行php artisan config:cache
来消除错误。意味着 Laravel 会从 config 文件中读取环境变量,而不是直接从 .env 中读取环境变量
【讨论】:
【参考方案4】:不应定义 $_ENV
超级全局的唯一原因是它是否已从 variables_order
配置中删除。
检查php.ini
(或任何其他相关配置文件)的variables_order
属性。要设置$_ENV
,它必须包含一个“E”。默认设置是
variables_order = "EGPCS"
如果您在查找配置时遇到问题,<?php phpinfo() ?>
转储还应显示值和配置文件位置。
variables_order
是PHP_INI_PERDIR
模式设置,意思是……
Entry可以设置在php.ini、.htaccess、httpd.conf或.user.ini(自 PHP 5.3 起)
字符代表
E -$_ENV
G - $_GET
P - $_POST
C - $_COOKIE
S - $_SERVER
【讨论】:
以上是关于未定义变量:Laravel 5.3 中的 _ENV的主要内容,如果未能解决你的问题,请参考以下文章
.env 变量在 Laravel 项目中的 Vue 组件中返回 undefined
Laravel 5.3 没有 .env 只有 .env.dev
在布局中的 Laravel 5.3 视图中包含 PHP 变量
调用未定义的方法 Maatwebsite\Excel\Facades\Excel::create() - Laravel 5.3