【问题标题】:Laravel .env variable always returns nullLaravel .env 变量总是返回 null
【发布时间】:2018-03-05 01:09:45
【问题描述】:

我将此变量添加到 .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

【问题讨论】:

  • 尝试运行以下命令 php artisan config:clear 和 php artisan optimize
  • 您确定您有应用密钥吗?运行php artisan key:generate 进行确认,然后重试。
  • 您能回答这个问题吗:您的 .env 文件放在哪里?您是否尝试在修补程序中执行 env("STRIPE") 调用?其他环境参数有效(如env("APP_NAME")?
  • 所以基本上这可能是配置被缓存并且未从.env文件加载环境值的事实。始终通过config 方法访问您内部的环境变量。要测试只运行命令php artisan config:clear 并重试上述测试

标签: php laravel laravel-5


【解决方案1】:

您的问题的主要原因是您正在缓存您的配置。运行 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】:

    首先,您的.env 文件中没有STRIPE_SECRET(根据编辑问题之前的内容)。所以请确保你的.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;
    });
    

    【讨论】:

      【解决方案3】:

      如果你有 STRIPE="a12345" .env 文件中的这个,或者如果您在 .env 文件或 config 文件中进行任何更改,那么您将放弃这些步骤

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

      首先运行这些命令

       1. php artisan config:clear
       2. php artisan cache:clear
       3. composer dump-autoload
      

      最后用这个命令获取变量

      dd(env('STRIPE'));
      

      这对我有用

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

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

      【讨论】:

      • 这对我有用。重复尝试了第 1 步和第 2 步(来自其他建议),但直到我也尝试了第 3 步才奏效。
      【解决方案4】:

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

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

      还要确保

      如果您在部署期间使用config:cache 命令,则必须确保您只从配置文件中调用 env 函数,而不是从应用程序的其他任何地方调用。 如果您从应用程序中调用 env,强烈建议您将正确的配置值添加到配置文件中,然后从该位置调用 env,这样您就可以将 env 调用转换为配置调用。

      参考link

      更新 1:

      同时确保你已将 .env.example 重命名为 .env file 默认 laravel 有 .env.example

      更新 2

      根据您的新更新问题,您的 env 文件有 STRIPE 而不是 STRIPE_SECRET 所以如果不是错字错误,你可以像这样访问

      env('STRIPE')
      

      【讨论】:

      • Still routes/web.php 返回 null。
      • 你确定你有 .env 文件而不是 .env.example
      • 确定我有一个 .env 文件。
      • okat .i 已经尝试了 env 方法它对我有用。奇怪的错误
      • 你能访问其他数据库信息吗
      【解决方案5】:

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

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

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

      【讨论】:

      • 我应该如何启动应用程序。这个应用程序在我自己的服务器上运行,所以它最近重新启动了。
      • 你试图在哪里获取变量
      • 还是不行。我尝试在 routes/web.php 中获取变量
      • 似乎你的 .env 中有 STIPE 密钥而不是 STRIPE_SECRET
      • 似乎您在上面提到的 .env 文件中没有 STRIPE_SECRET 。它的条纹我猜你想得到
      【解决方案6】:

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

      documentation

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

      所以正确的答案是

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

      我从同一个documentation引用它

      但为了快速修复,这样做可以:

      php 工匠配置:清除

      【讨论】:

      • 除了运行 php artisan config:cache。如有必要,假设我将 API_DOMAIN=someaddress.com 作为 .env 文件中的一行,我应该将哪一行放在哪个文件中?我应该用什么替换我的 env('API_DOMAIN') 调用?
      • 如果你懒把它放在\config\app.php,如果你觉得你正在制作一个新的api服务连接器使用\config\services.php,如果你觉得这是一件大事 - 创建你自己的文件.
      【解决方案7】:

      我不建议使用 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)
      

      【讨论】:

        猜你喜欢
        • 2017-08-31
        • 1970-01-01
        • 1970-01-01
        • 2016-11-11
        • 2018-12-06
        • 1970-01-01
        • 1970-01-01
        • 2021-11-17
        相关资源
        最近更新 更多