【问题标题】:Laravel 5.2 not reading env fileLaravel 5.2 不读取 env 文件
【发布时间】:2016-03-29 00:11:29
【问题描述】:

升级到 Laravel 5.2 后,我的 .env 文件值都没有被读取。我关注了upgrade instructions;除了 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 项目。

【问题讨论】:

  • 您确定 .env 文件仅命名为 .env 吗?不是 .env.example?
  • 安德鲁你是通过forge界面编辑.env文件还是上传?
  • @JamesElliott 是的,它是.env
  • 或者你在本地运行这个?如果您在工匠服务下运行,则需要重新启动它以防万一。
  • @MarkDavidson 在命令行中通过 vi 编辑它,不,它在一个完整的服务器上

标签: php laravel environment-variables laravel-5.2


【解决方案1】:

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

SITE_NAME="My website"

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

php artisan config:cache
php artisan config:clear

【讨论】:

  • 是的,它正在工作。更改.env 文件中的任何值后,运行php artisan config:cache & php artisan config:clear 命令。它会起作用的。
  • 对于 Laravel8 使用相同的。在我的特殊情况下,只有“php artisan config:clear”就足够了。
【解决方案2】:

来自官方 Laravel 5.2 升级说明:

如果您在部署期间使用config:cache 命令,您 必须确保您只从内部调用 env 函数 您的配置文件,而不是来自您的其他任何地方 应用。

如果您在应用程序中调用env,则强烈 建议您在配置中添加适当的配置值 文件并从该位置调用env,从而允许您转换 你的env 调用config 调用。

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

【讨论】:

  • php artisan config:cache 为我解决了这个问题 - 没有其他任何帮助。甚至没有php artisan config:clear - 谢谢!
  • Laravel 5.3 php artisan config:clear 是唯一对我有用的东西
  • Laravel 5.4 - 部署在 VPS 上:php artisan config:clear 为我工作。我之前没有做 config:cache,所以我不得不清除缓存似乎有点奇怪。
  • 确保您正在编辑 .env 而不是 .env.example 文件
【解决方案3】:

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

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

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

【讨论】:

  • 救了我的命。谢了。但 id 不明白为什么。
  • 这个订单救了我。谢谢
  • 谢谢你善良的互联网陌生人,这已经完成了!
  • 如果我每次回答这个问题你都能得到 1 美元,那你已经很有钱了。谢谢!
  • 这个订单节省了我的生产时间。太棒了。
【解决方案4】:

哇。好伤心。这是因为我有一个 env 值,其中有一个空格,而不是用引号括起来

这个

SITE_NAME=My website

改成这个

SITE_NAME="My website"

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

【讨论】:

  • 同样的想法 - 似乎空格会在 5.2 下的 .env 中导致问题,而在 5.1 中却没有。
  • 这是我(许多)对 Laravel 的误解之一:它有一种习惯,有时会默默地忽略和接受各种配置和/或其他类型的错误,没有任何迹象表明有任何问题.鉴于,这可能是 phpdotenv 的“功能”,但 Laravel 仍然知道需要包含一个 .env 文件,并且它没有成功,但懒得告诉任何人。
  • 我已经在如此愚蠢的事情上浪费了几个小时。谢谢你阻止我浪费更多!
【解决方案5】:

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

php artisan config:clear
php artisan optimize

【讨论】:

  • 请注意,artisan optimize 构建了许多缓存,包括配置缓存,如已接受的答案。
【解决方案6】:

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

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

建议 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:当syntax1不起作用时,您可以尝试另一种syntax2

   $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");

【讨论】:

  • 只是想补充一点,在代码库中添加秘密是个坏主意(参见建议 6)。
  • 这不是真正的客户和秘密 id,我提供了一份草稿信息,以帮助了解解决方案查找器。谢谢@Sherlock
  • 我不是这个意思。如果您将秘密作为第二个参数传递给 env() 方法,这意味着您将这些秘密添加到您的存储库中,从而违反了不在存储库中包含 .env 值的最佳实践。
【解决方案7】:

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

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

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

【讨论】:

  • 我想我得到了同样的错误,因为我的应用程序是 Laravel 4,然后升级到 5.0,然后升级到 5.1,等等。可能错过了在我的 app.php 中添加这个值。谢谢你为我节省了很多时间。这是一个赞成票!
【解决方案8】:

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

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

【讨论】:

    【解决方案9】:

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

    双引号再次起作用

    APP_URL="http://localhost:8000"
    

    然后

    php artisan config:clear
    

    【讨论】:

      【解决方案10】:

      除了@andrewtweber 的建议之外,请确保您在 KEY=value 之间没有空格,除非它在引号之间

      .env 文件,例如:

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

      到:

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

      【讨论】:

        【解决方案11】:

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

        【讨论】:

          【解决方案12】:

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

          【讨论】:

            【解决方案13】:

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

            @Payal Pandav 给出了上述评论。

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

            【讨论】:

              【解决方案14】:

              在我的情况下,laravel 5.7 env('APP_URL') 不起作用,但 config('app.url') 起作用。如果我将新变量添加到 env 并进行配置 - 它不起作用 - 但在 php artisan config:cache 之后它开始起作用。

              【讨论】:

              • 如果你在开发环境中,你不应该缓存你的配置和路由。要删除所有缓存,您可以使用:php artisan optimize:clear
              • @ZohaibHassan 如何在开发环境中关闭配置和路由的缓存?
              • 以上命令将关闭 1. 路由缓存,2 配置缓存,3. 清除视图 4. 清除优化文件 5. 清除缓存(如果有)
              • 仅用于配置,您可以使用php artisan config:clear,它将清除您的配置缓存并且不会再次生成,当您继续生产时,您可以运行php artisan config:cache 来缓存您的配置
              【解决方案15】:

              我经历过。原因是 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 配置,以便它以拥有这些文件的所有者的身份为该特定站点提供服务
              【解决方案16】:

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

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

              来源:Official Laravel Docs - Queues

              【讨论】:

                【解决方案17】:

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

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

                【讨论】:

                  【解决方案18】:

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

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

                  这次成功了。

                  【讨论】:

                    【解决方案19】:

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

                    【讨论】:

                      【解决方案20】:

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

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

                      echo $VAR_NAME
                      

                      【讨论】:

                        【解决方案21】:

                        几乎尝试了以上所有方法。结束了

                        chmod 666 .env

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

                        【讨论】:

                          猜你喜欢
                          • 2017-01-15
                          • 2018-10-20
                          • 2017-09-30
                          • 1970-01-01
                          • 2017-12-08
                          • 2014-12-09
                          • 2020-12-01
                          • 2021-04-22
                          • 2017-06-10
                          相关资源
                          最近更新 更多