未定义变量: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:clearphp 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:clearphp 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_orderPHP_INI_PERDIR 模式设置,意思是……

Entry可以设置在php.ini.htaccesshttpd.conf.user.ini(自 PHP 5.3 起)

字符代表

E - $_ENV G - $_GET P - $_POST C - $_COOKIE S - $_SERVER

【讨论】:

以上是关于未定义变量:Laravel 5.3 中的 _ENV的主要内容,如果未能解决你的问题,请参考以下文章

.env 变量在 Laravel 项目中的 Vue 组件中返回 undefined

Lumen 5.3 未定义变量:闭包

Laravel 5.3 没有 .env 只有 .env.dev

在布局中的 Laravel 5.3 视图中包含 PHP 变量

调用未定义的方法 Maatwebsite\Excel\Facades\Excel::create() - Laravel 5.3

Svelte 中的环境变量 - __myapp 未定义