Laravel 5.2没有读取env文件

and*_*ber 82 php environment-variables laravel laravel-5.2

升级到Laravel 5.2后,我的.env文件值都没有被读取.我按照升级说明进行操作 ; 除了auth.php之外,我的配置文件都没有被更改.它们在之前的版本5.1.19中都运行良好

.env 包含诸如的值

DB_DATABASE=mydb
DB_USERNAME=myuser
Run Code Online (Sandbox Code Playgroud)

config/database.php 包含

'mysql' => [
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
]
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

PDOException: SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: NO)
Run Code Online (Sandbox Code Playgroud)

显然没有拉我的env配置.这会影响我的每个配置文件,包括第三方,如bugsnag.

我也试过了

php artisan config:clear
php artisan cache:clear
Run Code Online (Sandbox Code Playgroud)

更新

php artisan tinker

>>> env('DB_DATABASE')
=> null
>>> getenv('DB_DATABASE')
=> false
>>> config('database.connections.mysql.database')
=> "forge"
>>> dd($_ENV)
[]
Run Code Online (Sandbox Code Playgroud)

我尝试安装Laravel 5.2的新副本.我基本上只复制在我的"app"文件夹中; 没有包含额外的作曲家包.还有同样的问题.我在同一台服务器上有其他Laravel 5.2项目正常工作.

Gau*_*pta 75

从官方Laravel 5.2升级说明:

如果config:cache在部署期间使用该命令,则 必须确保仅从env配置文件中调用该函数,而不是从应用程序中的任何其他位置调用该函数.

如果您env在应用程序中进行呼叫,强烈建议您在配置文件中添加正确的配置值,并env从该位置进行呼叫,以便将env呼叫转换为config呼叫.

参考:https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

  • Laravel 5.3`php artisan config:clear`是唯一对我有用的东西 (26认同)
  • `php artisan config:cache`为我解决了 - 没有其他任何帮助.甚至不是`php artisan config:clear` - 谢谢! (25认同)
  • Laravel 5.4 - 部署在VPS上:`php artisan config:clear`为我工作.我之前没有做config:cache,所以我必须清除缓存似乎有点奇怪. (8认同)

小智 59

如果您的任何.env变量包含空格,请确保将它们用双引号括起来.例如:

SITE_NAME="My website"

在测试之前不要忘记清除缓存:

php artisan config:cache
php artisan config:clear
Run Code Online (Sandbox Code Playgroud)

  • 是的,它正在工作。更改“.env”文件中的任何值后,运行“php artisan config:cache & php artisan config:clear”命令。它会起作用的。 (2认同)

and*_*ber 38

哇.好悲伤.这是因为我有一个带有空格的env值,而不是用引号括起来

这个

SITE_NAME=My website
Run Code Online (Sandbox Code Playgroud)

改成了这个

SITE_NAME="My website"
Run Code Online (Sandbox Code Playgroud)

固定它.我认为这与Laravel 5.2有关,现在将vlucas/phpdotenv从1.1.1 升级到2.1.0

  • 这是我与Laravel的许多错误之一:它有一种习惯,有时会默默地忽略和接受各种配置和/或其他类型的错误,没有任何迹象表明出现了问题.鉴于,这可能是`phpdotenv`的"特征",但是Laravel仍然知道有一个需要包含的`.env`文件,并且它没有成功,但是不想告诉任何人. (5认同)
  • 我已经在一些愚蠢的事情上浪费了时间。谢谢您阻止我浪费更多! (2认同)

Der*_*ima 21

我有一个类似的问题,我config/services.php解决了使用config clearoptimize命令:

php artisan config:clear
php artisan optimize
Run Code Online (Sandbox Code Playgroud)


Gan*_*h K 16

运行这个:

php artisan config:clear
php artisan cache:clear
Run Code Online (Sandbox Code Playgroud)

然后
php artisan config:cache


Maj*_*bib 16

您可以通过以下建议解决问题

建议 1:

你必须通过配置文件使用.env文件,这意味着你需要从配置文件(例如/config/app.php或/config/database.php)中读取.env文件,然后你才能使用配置来自项目任何位置的文件。

建议 2: 在双引号内设置您的 env 值

 GOOGLE_CLIENT_ID="887557629-9h6n4ne.apps.googleusercontent.com"
 GOOGLE_CLIENT_SECRET="YT2ev2SpJt_Pa3dit60iFJ"
 GOOGLE_MAP="AIzaSyCK6RWwql0DucT7Sl43w9ma-k8qU"
Run Code Online (Sandbox Code Playgroud)

建议 3:在更改任何配置或 env 值后保持以下命令序列。

 composer dump-autoload
 composer dump-autoload -o

 php artisan clear-compiled
 php artisan optimize

 php artisan route:clear
 php artisan view:clear

 php artisan cache:clear
 php artisan config:cache
 php artisan config:clear
Run Code Online (Sandbox Code Playgroud)

建议 4: 当语法 1 不起作用时,您可以尝试另一种语法 2

   $val1 = env('VARIABLE_NAME');     // syntax1
   $val2 = getenv('VARIABLE_NAME');  // syntax2
   echo 'systax1 value is:'.$val1.' & systax2 value is:'.$val2;
Run Code Online (Sandbox Code Playgroud)

建议5:当您的用户数量较多/更多时,您必须在服务器配置中增加相关内存大小。

建议 6:在读取 .env 变量时设置一个默认的可能值。

 $googleClinetId=env("GOOGLE_CLIENT_ID","889159-9h6n95f1e.apps.googleusercontent.com");
 $googleSecretId=env("GOOGLE_CLIENT_ID","YT2evBCt_Pa3dit60iFJ");
 $googleMap=env("GOOGLE_MAP","AIzaSyCK6RUl0T7Sl43w9ma-k8qU");
Run Code Online (Sandbox Code Playgroud)


TrO*_*nNe 11

对我来说,它按以下顺序工作:

php artisan config:cache
php artisan config:clear
php artisan cache:clear
Run Code Online (Sandbox Code Playgroud)

而且我尝试了所有其他方法而没有运气。

  • 经过几个小时的调试,此命令解决了我的问题。 (2认同)

小智 10

我对当地环境有同样的问题,我解决了

  1. php artisan配置:清除
  2. php artisan config:cache
  3. 然后取消php artisan serve命令,然后重新启动.


dKe*_*Ken 8

我在升级说明中错过了这个:

app.php配置文件中添加一个env配置选项,如下所示: 'env' => env('APP_ENV', 'production')

添加此行.env可以正确读取本地文件.

  • 我想我遇到了同样的错误,因为我的应用程序是 Laravel 4,然后升级到 5.0,然后升级到 5.1,等等。可能错过了在我的 app.php 中添加这个值。谢谢你为我节省了很多时间。这是一个赞成票! (2认同)

Sha*_*war 8

当你发出命令php artisan config:cache然后它将消灭所有env变量env()并将给出空值,尝试运行follwing命令并繁荣那里你env()再次开始捕获所有env变量

php artisan config:clear
Run Code Online (Sandbox Code Playgroud)


小智 8

对我来说,以下工作

- php artisan config:cache
- php artisan config:clear
- php artisan cache:clear
Run Code Online (Sandbox Code Playgroud)


Ada*_*ski 7

简单就是力量:

php artisan config:cache
Run Code Online (Sandbox Code Playgroud)

您将收到:

配置缓存已清除!

配置缓存成功!


Die*_*ezú 5

使用以下方法删除缓存:

    php artisan config:clear
    php artisan config:cache
Run Code Online (Sandbox Code Playgroud)


Sta*_*ros 5

当:port在本地.env中时,也会发生同样的事情

再次使用双引号可以解决问题

APP_URL="http://localhost:8000"
Run Code Online (Sandbox Code Playgroud)

然后

php artisan config:clear
Run Code Online (Sandbox Code Playgroud)