未定义的变量:Laravel 5.3中的_ENV

时间:2018-02-01 05:13:45

标签: php laravel laravel-5 environment-variables vendor

我用Laravel 5.3测试我的系统:

过去几周我的系统工作正常。自上周末以来,我遇到了同样的错误 TWICE ,如下所示: -

  

注意:未定义的变量:第303行的C:\ NewFolder \ htdocs \ project \ vendor \ vlucas \ phpdotenv \ src \ Loader.php中的_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,但仍未能恢复正常。

任何人都知道为什么会这样?感谢

我使用的版本:

  • OS:Window 7
  • 浏览器:Mozilla Firefox
  • PHP:7.1.1
  • Laravel:5.3

4 个答案:

答案 0 :(得分:3)

不应定义$_ENV超全局的唯一原因是它是否已从variables_order配置中删除。

检查php.ini(或任何其他相关配置文件)中的variables_order属性。要设置$_ENV必须包含" E" 。默认设置为

variables_order = "EGPCS"

如果您在查找配置时遇到问题,<?php phpinfo() ?>转储还应显示值和配置文件位置。

variables_orderPHP_INI_PERDIR模式设置,意思是......

  

可以在 php.ini .htaccess httpd.conf .user.ini (自PHP 5.3起)

字符代表

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

答案 1 :(得分:0)

经过一些调查和研究,我发现Github #8191有一些类似的问题。

我可以通过运行php artisan config:cache来摆脱错误。意味着Laravel将从配置文件中读取环境变量,而不是直接从.env

读取环境变量

答案 2 :(得分:0)

这显然是代码范围之外的错误;它是您的依赖项或系统配置的更改。您应该考虑重建依赖关系缓存,并在错误开始之前回滚到旧版本的依赖关系。

正如@MahdiYounesi所说,从phpdotenv依赖开始。

答案 3 :(得分:0)

老问题,但在 2021 年发现了同样的错误并已解决:

在 Laravel 7 中使用 https://github.com/lazychaser/laravel-nestedset

解决方案

代替刀片模板中的@foreach

使用:

@php
foreach(){}
@endphp