Laravel 5.2无法读取环境文件


110

升级到Laravel 5.2后,没有任何.env文件值被读取。我遵循了升级说明;除auth.php外,我的所有配置文件均未更改。它们在以前的版本5.1.19中都正常工作

.env 包含诸如

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php 包含

'mysql' => [
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
]

我收到此错误:

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

显然没有拉我的环境配置。这正在影响我的每个配置文件,包括第三方(例如bugsnag)。

我也试过

php artisan config:clear
php artisan cache:clear

更新资料

php artisan tinker

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

我尝试安装Laravel 5.2的新副本。我基本上只复制到我的app文件夹中;不包括其他作曲家软件包。仍然有同样的问题。我在同一台服务器上还有其他运行良好的Laravel 5.2项目。


1
您确定.env文件仅命名为.env吗?不是.env.example吗?
詹姆斯·埃利奥特

Andrew,您是通过伪造界面来编辑.env文件还是上传文件?
马克戴维森

@JamesElliott是的.env
andrewtweber 2015年

1
还是在本地运行?如果您在技术人员的协助下跑步,则需要重新启动它以防万一。
马克戴维森

@MarkDavidson在命令行中通过vi对其进行编辑,不,它在完整的服务器上
andrewtweber 2015年

Answers:


91

从官方的Laravel 5.2升级说明中:

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

如果env从应用程序内部进行调用,则强烈建议您将适当的配置值添加到配置文件中,然后env从该位置进行env调用,以允许您将调用转换为config调用。

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


36
php artisan config:cache为我解决了它-没有其他帮助。甚至没有php artisan config:clear-谢谢!
凯尔

36
Laravel 5.3 php artisan config:clear是唯一对我有用的工具
Peon

9
Laravel 5.4-部署在VPS上:php artisan config:clear对我有用。我之前没有做过config:cache,所以我不得不清除缓存似乎有点奇怪。
安东尼奥


确保您正在编辑文件.env而不是.env.example文件
Connor Leech '18

84

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

SITE_NAME="My website"

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

php artisan config:cache
php artisan config:clear

是的,它正在工作。更改.env文件中的任何值后,运行php artisan config:cache & php artisan config:clear命令。它将起作用。
Chandan Sharma

41

哇。真是的 这是因为我有一个env值,其中有一个空格,没有用引号引起来

这个

SITE_NAME=My website

改成这个

SITE_NAME="My website"

解决它。我认为这与Laravel 5.2有关,现在将vlucas / phpdotenv从1.1.1 升级到了2.1.0


相同的想法-似乎空格导致.env5.2下的问题,而5.1则没有。
thomthom

5
这是我与Laravel在一起的错误(很多)之一:它有一种习惯,有时会默默地忽略并接受各种配置和/或其他类型的错误,没有迹象表明发生了任何错误。给出的,这可能是的“功能” phpdotenv,但是Laravel仍然知道有一个.env文件需要包含在内,并且该文件没有成功,但是也不想告诉任何人。
dKen '16

2
我已经在一些愚蠢的事情上浪费了时间。谢谢您阻止我浪费更多!
詹斯基

29

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

php artisan config:cache
php artisan config:clear
php artisan cache:clear

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


2
经过几个小时的调试,此命令解决了我的问题。
奴才

救了我一命。Tks。但是id不明白为什么。
Mateus Galasso

这个命令救了我。谢谢
Asad ullah

谢谢亲切的互联网陌生人,这完成了!
爱德华多

如果您每次得到这个答案都会得到1美元,那么您已经很富有了。谢谢!
Altin

25

我遇到类似的问题,config/services.php并使用config clearoptimize命令解决了问题:

php artisan config:clear
php artisan optimize

24

对我来说,以下工作

- php artisan config:cache
- php artisan config:clear
- php artisan cache:clear

17

运行这个:

php artisan config:clear
php artisan cache:clear

然后
php artisan config:cache


11

我在本地环境上也遇到了同样的问题,

  1. PHP的工匠配置:清除
  2. PHP的工匠配置:缓存
  3. 然后取消php artisan serve命令,然后再次重新启动。

11

您可以按照以下建议解决问题

建议1:

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

建议2: 在双引号内设置环境值

 GOOGLE_CLIENT_ID="887557629-9h6n4ne.apps.googleusercontent.com"
 GOOGLE_CLIENT_SECRET="YT2ev2SpJt_Pa3dit60iFJ"
 GOOGLE_MAP="AIzaSyCK6RWwql0DucT7Sl43w9ma-k8qU"

建议3:更改任何配置或环境值后,请保持以下命令序列。

 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

建议4: 如果语法1不起作用,则可以尝试其他语法2

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

建议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");

11

当您触发命令时php artisan config:cache,它将清除所有env变量并env()提供空值,请尝试运行以下命令,然后在此处env()重新启动以捕获所有env变量

php artisan config:clear

就像魔术一样,这对我有用-很好的答案!
David Partyka

9

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

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

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


1
我猜我遇到了同样的错误,因为我的应用程序是Laravel 4,然后升级到5.0,然后又升级到5.1,依此类推。可能错过了在我的app.php中添加此值。感谢您为我节省了很多时间。这是一个赞!
Bruno P. Kinoshita


6

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

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

APP_URL="http://localhost:8000"

然后

php artisan config:clear


4

除了@andrewtweber建议的内容外,还要确保KEY =之间没有空格,除非它在引号之间

.env文件,例如:

...
SITE_NAME= My website
MAIL_PORT= 587
MAIL_FROM_NAME= websitename
...

至:

...
SITE_NAME="My website"
MAIL_PORT=587
MAIL_FROM_NAME=websitename
...

3

我在本地遇到了同样的问题,并且在这里尝试了所有答案,但无济于事。只有这对我有用, php artisan config:clear并且restart server。奇迹般有效!


4
@RameshMhetre试试php artisan config:cachephp artisan config:clear然后php artisan cache:clear
Dexter Bengil '18


2

如果您在本地开发期间确实调用了config:cache,则可以通过删除bootstrap / cache / config.php文件来撤消此操作。这对我来说是工作。


2

如果您在本地开发期间确实调用了config:cache,则可以通过删除bootstrap / cache / config.php文件来撤消此操作。这对我来说是工作。

@Payal Pandav在上面给出了评论。

我想告诉一个简单的解决方法。只需在bootstrap / cache /文件夹中编辑config.php文件。并更改凭据。这对我有用。请不要删除此文件,因为它可能在生产环境中包含其他关键数据。


2

在我的情况下,laravel 5.7 env('APP_URL')不起作用,但config('app.url')可以起作用。如果我将新变量添加env到config中,它将无法正常工作,但是在php artisan config:cache启动后可以正常工作。


3
如果您处于开发环境中,则不应缓存您的配置和路由。要删除所有缓存,您可以使用:php artisan optimize:clear
Zohaib

@ZohaibHassan如何在开发环境中关闭配置和路由的缓存?
卡米尔·基列夫斯基(KamilKiełczewski)

1
上面的命令将关闭1.路由缓存,2配置缓存,3.清除视图4.清除优化的文件5.清除缓存(如果有)
Zohaib

1
仅对于配置,您可以使用php artisan config:clear它来清除配置缓存,并且不会再次生成,并且在进行生产时,可以运行php artisan config:cache以缓存配置
Zohaib

1

如果您php artisan config:cache在控制台上运行此命令,则它将所有.env文件内容存储在缓存中,在此命令之后,如果将任何内容附加到.env文件中,则在您运行php artisan config:clear命令之前它将不可用


1

在幼体发育过程中,我经常遇到相同的问题。有时env停止工作并且不返回任何值。原因可能会有所不同,具体取决于您的情况。但就我而言,几天前

 PHP artisan::config:clear

因此请小心使用此命令。因为它将清除其缓存中的所有配置数据。因此之后,它将不会返回任何值。因此,在这种情况下,如果您已运行PHP artisan config :: clear命令,则需要首先使用它 。

php artisan config:cache  // it will cache all data 
php artisan config:clear
Configuration cache cleared!

1

我经历了 原因是apache(用户www-data)由于文件权限而无法读取.env。因此,我更改了文件权限,以确保服务器(Apache)具有对该文件的读取权限。就这样,繁荣起来,现在一切正常!
更新:
这样做的方式有所不同,具体取决于谁拥有.env文件,但是假设它属于Apache www-data组,则可以执行以下操作:

sudo chmod g+r .env

根据您的权限结构进行修改。


So i changed the file permissions to ensure that the server (apache) had read permissions to the file.这实际上是错误的方法。您应该具有固定的apaxhe配置,因此它可以作为拥有这些文件的所有者将该特定站点服务
Marcin Orlowski

0

我在index.php文件中执行dd / die / dump犯了错误。这将导致系统无法重新生成配置。

只需在视图文件中转储即可。.env文件更改立即更新。


0

我对此有一些问题。这似乎是应用程序中某处的文件权限问题,而不是.env文件。

我必须-停止我的码头工人-使用chown为我自己的用户设置整个项目的所有权-再次启动码头工人

这次它起作用了。


-1

尝试了以上所有方法。最终做

chmod 666 .env

起作用了。这个问题似乎在我继承的应用程序中不断出现,但是,最近一次是在添加.env.testing之后。运行Laravel 5.8

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.