在Laravel 5.3中出现Undefined variable: _ENV错误

10
我正在使用 Laravel 5.3 测试我的系统:
在过去的几周里,我的系统一直运行良好。但自从上个周末以来,我遇到了下面相同的 两个 错误:

注意:C:\NewFolder\htdocs\project\vendor\vlucas\phpdotenv\src\Loader.php 的第 303 行未定义变量 _ENV。

警告:C:\NewFolder\htdocs\project\vendor\vlucas\phpdotenv\src\Loader.php 的第 303 行期望参数2为数组,但实际为空。

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,但仍无法恢复正常。

有人知道为什么会发生这种情况吗?谢谢

我使用的版本:

  • 操作系统:Windows 7
  • 浏览器:Mozilla Firefox
  • PHP:7.1.1
  • Laravel:5.3

很奇怪,它应该在这里 - Phil
运行:php artisan view:clear - Hiren Gohel
1
@HirenGohel 相信 OP 在第二个要点中说他们已经尝试了 php artisan view:clearphp artisan cache:clear - Phil
你正在使用哪个版本的 PHP?在 php.ini 中,你为 register_long_arrays 设置了什么值? - Niklesh Raut
@user2486 register_long_arrays在PHP 5.4中已被删除。 - Phil
显示剩余5条评论
4个回答

5
唯一不定义 $_ENV 超全局变量的原因是它已经从 variables_order 配置中删除。
请检查您的 php.ini(或任何其他相关配置文件)中的 variables_order 属性。为了设置 $_ENV,它必须包含一个 "E"。默认设置为:
variables_order = "EGPCS"

如果您找不到配置文件,可以使用<?php phpinfo() ?>来查看值和配置文件的位置。 variables_order是一个PHP_INI_PERDIR模式设置,意味着...

可以在php.ini.htaccesshttpd.conf.user.ini(自PHP 5.3以来)中设置该项。

这些字符分别代表:
  • E - $_ENV
  • G - $_GET
  • P - $_POST
  • C - $_COOKIE
  • S - $_SERVER

1

经过一番搜索和研究,我发现有些类似的问题在Github #8191上。

运行php artisan config:cache后,我成功解决了这个错误。这意味着Laravel将从配置文件中读取环境变量,而不是直接从.env文件中读取环境变量。


0
这明显是超出你的代码范围的错误,可能是因为你的依赖项或系统配置发生了变化。建议重新构建依赖缓存,并回滚到错误开始日期之前的旧版本依赖项。
正如 @MahdiYounesi 所说,从 phpdotenv 依赖项开始处理。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接