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

yyi*_*yii 10 php environment-variables vendor laravel laravel-5

我用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

.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=
Run Code Online (Sandbox Code Playgroud)
  • 当第一次出现上述错误时(当我加载登录页面时),我清除了浏览器缓存和历史记录,系统设法恢复正常.
  • 当第二次出现相同的错误时(在测试过程中),我做了第一次相同的操作,清除了浏览器缓存和历史记录,但它没有帮助,我刷新浏览器后错误仍然显示.所以,我执行php artisan view:clearphp artisan cache:clear但仍然未能恢复正常.

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

我使用的版本:

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

Phi*_*hil 5

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

检查您php.ini(或任何其他相关配置文件)的variables_order属性。对于$_ENV要设置的,它必须包含一个“E”。默认设置是

variables_order = "EGPCS"
Run Code Online (Sandbox Code Playgroud)

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

variables_order是一种PHP_INI_PERDIR模式设置,意思是...

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

字符代表

  • Ë -$_ENV
  • -$_GET
  • P -$_POST
  • ç -$_COOKIE
  • S -$_SERVER


yyi*_*yii 1

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

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