未定义变量: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=

有人知道为什么会这样吗?谢谢

我使用的版本:

不应该定义 $_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