143

升级到 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 项目。

4

21 回答 21

173

如果您的任何.env变量包含空格,请确保将它们包含在双引号中。例如:

SITE_NAME="My website"

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

php artisan config:cache
php artisan config:clear
于 2016-03-13T05:42:55.573 回答
105

来自官方 Laravel 5.2 升级说明:

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

如果您env从应用程序中调用,强烈建议您将正确的配置值添加到配置文件并env从该位置调用,从而允许您将env调用转换为config调用。

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

于 2016-04-22T08:46:23.283 回答
47

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

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

我已经尝试了所有其他方法,但没有运气。

于 2019-03-05T07:41:35.917 回答
45

哇。好伤心。这是因为我有一个带有空格的 env 值,而不是被引号包围

SITE_NAME=My website

改成这个

SITE_NAME="My website"

修复。我认为这与 Laravel 5.2 现在将vlucas/phpdotenv从 1.1.1 升级到 2.1.0有关

于 2015-12-22T19:38:46.220 回答
26

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

php artisan config:clear
php artisan optimize
于 2016-09-01T14:02:42.687 回答
15

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

建议一:

你必须通过配置文件来使用.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"

建议 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

建议 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");
于 2020-03-04T07:40:44.390 回答
12

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

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

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

于 2016-04-22T14:32:12.337 回答
12

我在本地环境中遇到了同样的问题,我解决了

  1. php工匠配置:清除
  2. php工匠配置:缓存
  3. 然后取消 php artisan serve 命令,然后重新启动。
于 2018-06-22T07:47:30.243 回答
7

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

双引号再次起到了作用

APP_URL="http://localhost:8000"

进而

php artisan config:clear
于 2019-02-28T16:31:41.790 回答
3

除了@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
...
于 2017-06-16T10:58:23.790 回答
2

我使用以下命令解决了生成新密钥的问题:php artisan key:generate

于 2017-09-05T08:41:23.620 回答
1

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

于 2018-08-08T11:51:47.127 回答
1

我经历过这个。原因是 apache(用户 www-data)由于文件权限而无法读取 .env。所以我更改了文件权限以确保服务器(apache)对文件具有读取权限。只是那个和繁荣,现在一切都在工作!
更新:
如何做到这一点取决于谁拥有 .env 文件,但假设它属于 Apachewww-data组,您可以这样做:

sudo chmod g+r .env

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

于 2018-10-27T08:26:56.550 回答
1

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

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

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

于 2019-03-14T06:55:58.140 回答
1

就我而言,laravel 5.7 env('APP_URL')不起作用但config('app.url')可以工作。如果我将新变量添加到env和配置中-它不起作用-但是在php artisan config:cache它开始后起作用。

于 2019-04-30T21:14:00.910 回答
1

就我而言,我需要重新启动我的 Supervisord 作业(即我的队列工作人员)。这样做之后,我添加到我的 .env 文件中的一个新环境变量被成功拉入我的应用程序。

请记住,队列工作者是长期存在的进程,并将启动的应用程序状态存储在内存中。因此,它们在启动后不会注意到您的代码库中的更改。因此,在您的部署过程中,请务必重新启动您的队列工作程序。此外,请记住,您的应用程序创建或修改的任何静态状态都不会在作业之间自动重置。

资料来源:官方 Laravel 文档 - 队列

于 2022-01-13T16:09:47.483 回答
-1

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

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

于 2019-01-24T08:46:27.397 回答
-1

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

我不得不 - 停止我的 docker - 使用 chown 为我自己的用户设置整个项目的所有权 - 再次启动 docker

这次奏效了。

于 2020-04-14T17:54:21.593 回答
-1

如果您在更改环境变量后立即使用sai 环境,只需重新启动服务器,否则它将显示旧值。

于 2021-08-16T12:07:30.053 回答
-1

就我而言(Laravel 7.x),它发生是因为我在服务器上设置了环境变量。准确地说是在 Docker 容器中。并且由于环境变量的优先级高于 .env 文件,因此在 .env 文件编辑期间没有任何变化。

检查您是否在服务器上设置了环境变量:

echo $VAR_NAME
于 2021-09-24T15:22:42.800 回答
-2

以上几乎都试过了。做完了

chmod 666 .env

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

于 2019-10-29T16:13:05.470 回答