Laravel 5.2没有读取env文件

时间:2015-12-22 16:51:52

标签: php laravel environment-variables laravel-5.2

升级到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)

显然没有拉进我的env配置。这会影响我的每个配置文件,包括第三方,例如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项目正常工作。

28 个答案:

答案 0 :(得分:63)

来自官方的Laravel 5.2升级说明:

  

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

     

如果您在应用程序中呼叫env,那就非常强烈   建议您为配置添加适当的配置值   文件并从该位置调用env,允许您进行转换   您的env来电config来电。

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

答案 1 :(得分:41)

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

SITE_NAME="My website"

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

php artisan config:cache
php artisan config:clear

答案 2 :(得分:35)

哇。好悲伤。这是因为我有一个带有空格的env值,没有被引号括起来

这个

SITE_NAME=My website

已更改为

SITE_NAME="My website"

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

答案 3 :(得分:20)

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

php artisan config:clear
php artisan optimize

答案 4 :(得分:15)

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

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

答案 5 :(得分:14)

运行这个:

php artisan config:clear
php artisan cache:clear

然后
php artisan config:cache

答案 6 :(得分:8)

当您发出命令php artisan config:cache时,它会清除所有env个变量,而env()会给出空值,尝试运行以下命令并再次展开env()开始捕获所有env变量

php artisan config:clear

答案 7 :(得分:8)

我在本地环境上遇到了同样的问题,我通过以下方式解决了

  1. php artisan config:clear
  2. php artisan config:cache
  3. 然后取消php artisan serve命令,然后重新启动。

答案 8 :(得分:7)

简单就是力量:

php artisan config:cache

您将收到:

清除配置缓存!

配置缓存成功!

答案 9 :(得分:6)

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

  

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

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

答案 10 :(得分:5)

使用以下方法删除缓存:

    php artisan config:clear
    php artisan config:cache

答案 11 :(得分: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
...

答案 12 :(得分:3)

我在当地遇到了同样的问题,我在这里尝试了所有答案,但无济于事。只有这对我有用, php artisan config:clearrestart server。像魅力一样工作!

答案 13 :(得分:3)

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

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

APP_URL="http://localhost:8000"

然后

php artisan config:clear

答案 14 :(得分:2)

运行此命令

php artisan config:clear   //repopulate all the env variable
php artisan cache:clear    //flush all the cached content
php artisan config:cache //flush all cached env variable

答案 15 :(得分:2)

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

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

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

答案 16 :(得分:2)

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

答案 17 :(得分:2)

我使用命令php artisan key:generate

解决了生成新密钥的问题

答案 18 :(得分:0)

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

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

答案 19 :(得分:0)

我经历了这一点。原因是apache(用户www-data)由于文件权限而无法读取.env。 因此,我更改了文件权限,以确保服务器(Apache)具有对该文件的读取权限。就这样,繁荣起来,现在一切都正常了!

答案 20 :(得分:0)

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

@Payal Pandav给出了以上评论。

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

答案 21 :(得分:0)

对我来说,以下方法奏效了

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

答案 22 :(得分:0)

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

答案 23 :(得分:0)

在幼体发育过程中,我经常遇到相同的问题。有时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!

答案 24 :(得分:0)

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

chmod 666 .env

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

答案 25 :(得分:0)

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

答案 26 :(得分:0)

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

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

这一次成功了。

答案 27 :(得分:0)

不确定是否已经发布,但这个组合对我有用:

php artisan clear-compiled 
composer dump-autoload
php artisan optimize