Laravel .env变量始终返回null

时间:2017-09-23 16:38:56

标签: php laravel laravel-5

我将此变量添加到.env文件

  

STRIPE_SECRET = A12345

我想使用routes / web.php转储变量

<?php
dd(env('STRIPE_SECRET'));

但它看起来总是返回null。

更新:更新了.env文件。我只删除了DB_PASSWORD。

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:08txDXXatyYsP5WQ4ECz35Q7OyBEe8Vgb/zK5fZsHik=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
APP_LOCALE=tr
APP_LC_ALL=tr_TR.utf8

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=gunluk
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=03ac580c85842d
MAIL_PASSWORD=1d6d902d296942
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=

STRIPE=a123
STRIPE_SECRET=a12345

7 个答案:

答案 0 :(得分:9)

首先,STRIPE_SECRET文件中没有.env(按编辑问题之前)。因此,请确保您的.env必须拥有此变量。您应该通过以相同的顺序执行以下命令来清除配置缓存

php artisan config:cache
php artisan config:clear 

Laravel缓存配置文件,以便更快地执行。因此,每次更改服务器上的配置文件时,都应清除缓存。

此外,您还可以运行这些命令以清除其他缓存

php artisan cache:clear   //for clearing the cache
php artisan view:clear    //for clearing the compiled views
php artisan route:clear   //for clearing the routes cache

您还可以为这些命令创建路径,并从代码中调用命令

Route::get('/cache-clear', function() {
    $exitCode = Artisan::call('cache:clear');
    echo "Cache Cleard: ".$exitCode;
});

Route::get('/view-clear', function() {
    $exitCode = Artisan::call('view:clear');
    echo "View Cleard: ".$exitCode;
});

Route::get('/route-cache', function() {
    $exitCode = Artisan::call('route:cache');
    echo "Route Cached: ".$exitCode;
});

Route::get('/route-clear', function() {
    $exitCode = Artisan::call('route:clear');
    echo "Route Cache Cleared: ".$exitCode;
});

Route::get('/config-cache', function() {
    $exitCode = Artisan::call('config:cache');
    echo "Config Cached: ".$exitCode;
});

Route::get('/config-clear', function() {
    $exitCode = Artisan::call('config:clear');
    echo "Config Cache Cleared: ".$exitCode;
});

答案 1 :(得分:7)

您遇到问题的主要原因是您正在缓存您的配置。运行php artisan config:cache时,您将配置存储在缓存中,Laravel下次启动时将无法读取.env文件,因为它检测到配置已存储在缓存中。环境文件应仅用于设置配置文件,然后访问您要查找的值,您应该只使用config方法。

假设您拥有包含此内容的文件config/stripe.php

<?php

return [
    'secret' => env('STRIPE_SECRET', '')
];

运行php artisan config:cache后,只需使用语法config('stripe.secret')通过应用程序代码访问此值。每次更新配置文件和.env时,都需要再次运行php artisan config:cache

答案 2 :(得分:4)

如果你有 STRIPE="a12345"文件中的.env.env文件或config文件中的任何更改,您可以执行以下步骤

还有一件事用逗号形式写变量值,如STRIPE="a12345"

首先运行这些命令

  1. php artisan config:clear
  2. php artisan cache:clear

  3. composer dump-autoload

  4. 最后使用此命令获取变量

    dd(env('STRIPE'));
    

    这对我有用

    还有一个愚蠢的建议:重启服务器

    我添加了所有可能的解决方案

答案 3 :(得分:3)

您可以使用以下命令清除配置缓存

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

还要确保

如果在部署期间使用config:cache命令,则必须确保仅从配置文件中调用env函数,而不是从应用程序中的任何其他位置调用。 如果从应用程序中调用env,强烈建议您在配置文件中添加正确的配置值,并从该位置调用env,允许您将env调用转换为config调用。

价:

https://laracasts.com/discuss/channels/general-discussion/laravel-5-environment-detection-not-working?page=1

<强>更新

另外,请确保您已将.env.example重命名为.env file,默认情况下laravel已.env.example

Updated 2

根据您的新更新问题,您的环境文件有STRIPE而不是STRIPE_SECRET 所以如果它没有错误的拼写错误

,你可以这样访问
env('STRIPE')

答案 4 :(得分:1)

确保您的应用已完全启动。

如果您使用cmd运行服务器,请尝试重新启动服务器。

如果不起作用,请尝试使用@iCoders上面提到的方法清除缓存。

答案 5 :(得分:1)

env(...)函数将在您缓存配置后返回null。 (从laravel 5.2到当前的5.7)

documentation

  

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

所以正确的答案应该是

  

如果要从应用程序内部调用env,则强烈建议您向配置文件中添加适当的配置值,然后从该位置调用env,从而使您可以将env调用转换为配置调用。

我引用了同一documentation

但是要快速修复,可以这样做:

  

php artisan config:clear

答案 6 :(得分:0)

我不建议使用env('STRIPE')命令来获取变量。在循环中,此命令在某些迭代后开始返回null。因此,最好创建一个配置文件并使用命令“ config('file_name.variable_name)”:

<?php
return [
    'sprite_secret' => env('STRIPE_SECRET', '')
];

首先运行这些命令

php artisan config:cache
php artisan config:clear

并使用此命令获取STRIPE_SECRET变量的值:

config('config_file.sprite_secret)