Laravel 5-env()始终返回null


79

我试图找出为什么我的env()助手总是回来null。这会引起麻烦,尤其是在app.php文件中env()(默认情况下广泛使用助手)。也许任何神秘的服务器设置?

我的环境文件

APP_ENV=production
APP_KEY=base64:mymagickey=
APP_DEBUG=false
APP_LOG_LEVEL=info
APP_URL=http://www.example.com

etc...

编辑-我尝试了以下操作

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

当然,我正在使用这样的env帮助器:env('APP_ENV')

但是仍然没有成功。奇怪的是,$_ENVphp变量包含.env文件中的每个变量。

Answers:


173

env(...)缓存配置后,该功能将不起作用。(从laravel 5.2到当前的5.7)

Laravel文档

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

所以正确的答案是

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

我引用了相同的文档

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

php artisan config:clear

现在应该很清楚,为什么在尝试config:cache时它没有帮助,即使它在缓存之前清除了配置。


谢谢,这php artisan config:clear是唯一使我的AWS SES凭证读取的方法。
Joe Scotto

2
所以我认为我们不应该env('APP_ENV') 在应用程序中直接使用类似的东西。相反,我们应该写在一行config/app.php'env' => env('APP_ENV'),。然后,在代码中使用它:config('app.env')
波斯菊

43

希望这个命令能救你

PHP的工匠配置:清除


19

如果您的Laravel在.env或数据库文件夹中进行了某些修改后或由于其他任何修改而无法按预期工作,则这五个最重要的命令。这是完整的说明:https : //www.youtube.com/watch?v=Q1ynDMC8UGg

php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
composer dump-autoload

同样的问题在这里。我试过删除缓存,作曲家转储自动加载...等。我正在使用laravel 5.5.44,必须使用\ Config :: get()从.env文件中调用配置
calin24 '18

我已在所有需要运行的位置列出了所有命令,以消除环境文件或配置等引起的任何缓存问题。这是线程:stackoverflow.com/a/43041479/6935763 请运行所有命令,让我知道它是否仍然不起作用。
学习者

2
仅运行php artisan config:cache不起作用。我运行后,php artisan config:clear它的工作原理。现在,我可以再次使用env($ key)。Thx @Learner
calin24 '18

我阅读了您的讨论,并将我的解释放在另一个答案中,请查看。
Yevgeniy Afanasyev '18

14

使用\Config::get('app.env');而不是,env(APP_ENV);因为最终您将遇到相同的错误,这对实时网站不利。

如果要从ENV添加自定义变量,请进入配置应用程序并找到以下内容:

/*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services your application utilizes. Set this in your ".env" file.
    |
    */

'env' => env('APP_ENV', 'production'),

在“ 'env' => env('APP_ENV', 'production'),”下添加新行,例如,可能是以下内容:

/*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services your application utilizes. Set this in your ".env" file.
    |
    */

'env' => env('APP_ENV', 'production'),
'key' => env('APP_KEY'),

您可以像这样调用“键”变量:

\Config::get('app.key');

每当您向应用程序环境中添加新的变量(例如“ key”)时,都需要使用config:cache来重置缓存。


我不确定,但可能是此错误仅在Windows中发生。但是您的解决方案也在Windows中解决了。它将在linux生产环境中工作吗?
阿米特·

@AmitShah,这不是错误,而是功能。请查看我的答案以获取详细信息。
Yevgeniy Afanasyev '18

11

以下命令对我有用。我不小心清除了所有缓存文件,因此env('something')返回null。

php artisan optimize:clear

10

这是一个“ .env”已知错误,可以通过以下方法解决:

php artisan config:cache

15
一些用户可能需要做php artisan config:clear代替
DIGITALCRIMINAL

6
Laravel 5.5我必须运行'php artisan config:clear'。谢谢
dacastro4

4
php artisan config:cache是​​env()值为null的原因。如果您希望缓存配置和环境变量,那么除了配置文件外,您不应该在其他任何地方使用env(),因为一旦缓存,env()将始终返回null。虽然现在我也看到config()和Config :: get()帮助器在缓存后返回null,这也很奇怪。
BRBdot

遵循上述步骤-...因此,当您应该意识到config()帮助程序也无法直接访问.env中的值时,就可以了。您将需要创建或使用现有的config / <插入配置文件名> .php配置文件,并从.env创建您的配置条目,然后使用该映射值。
BRBdot

1

如果接受的答案不能解决问题,请检查.env文件是否具有正确的读写权限。如果框架/库无法读取该文件,则值将始终为null。我在我的一个Lumen项目中遇到了这个问题,但是在更改了文件权限后,它起作用了。


0

我知道这是一个很旧的线程,原因可能不一样。但是我也遇到了同样的问题。

原因是我在.env文件中存在问题。这就是我在.env中得到的

TEST="e@1asa

请注意,缺少结尾引号。它应该像

TEST="e@1asa"

由于此错误,此后添加的所有env变量均返回null。

甚至没有写入错误日志。因此,如果遇到此错误,请尝试添加示例env变量作为文件的第一条记录。如果它有效并记录下来最后不起作用,则.env内可能有错误


0

将.env文件放在项目的根文件夹中

将它们添加到app.php文件。

try {
    (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    echo $e;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.