116

我试图找出为什么我的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

4

14 回答 14

247

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

Laravel文档

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

所以正确的答案是

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

我从同一个文档中引用了它

但是为了快速解决这个问题:

php artisan config:clear

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

于 2018-11-20T02:32:44.583 回答
57

希望这个命令能救你

php工匠配置:清除

于 2018-04-26T07:44:08.360 回答
43

如果您的 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
于 2017-04-06T05:21:13.913 回答
32

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

php artisan optimize:clear
于 2019-10-02T04:36:45.103 回答
18

使用\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'),

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

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

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

于 2017-07-10T08:10:56.747 回答
13

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

php artisan config:cache
于 2017-04-06T00:31:57.087 回答
8

只需在您的 Laravel 项目根目录下运行此命令

rm bootstrap/cache/config.php
于 2021-02-22T20:31:15.537 回答
3

不幸的是,公认的解决方案没有为这个问题提供适当的解决方案!

案例:因为Laravel 5.2,如果您直接调用,如果您作为最后一个命令执行env("key"),它将始终返回。nullphp artisan config:cache

接受的答案说php artisan config:clear作为最后一个命令执行以解决问题!这不是解决方案!,因为我们需要始终php artisan config:cache作为最后一个命令执行..

那么解决方案是什么?

在这里,我需要解释两种情况的解决方案:


案例 1(预定义键):如果您需要从.envLaravel 项目创建的文件中获取值(默认 .env 文件),或者通过您已经安装的第三方插件并按照正确的安装过程进行安装:

  1. 获取文件中列出的键名并.env在文件夹的文件中搜索它laravel_root/config(记住:文件config夹中的所有文件都以数组形式返回结果),例如我搜索的APP_URL是 Laravel 项目默认定义的:

在此处输入图像描述

正如你在这里所说,我在两个配置文件中找到了两个结果,一个 in filesystem.php另一个 in app.php,所以要在你的 laravel 项目的任何 php(类或视图文件,...等)中获取这些值中的任何一个,只需像这样调用它:

  • 对于我们在app.php文件中找到的结果,通过以下方式获取它的值:

配置('app.env');

app是 php 文件的名称,env 是作为app.php文件结果返回的数组的键。

  • 对于我们在filesystems.php文件中找到的结果,通过以下方式获取它的值:

配置('filesystems.public.url');

filesystems是 php 文件的名称,public是键(级别 1) ,是作为文件结果返回的数组url的键(级别 2)filesystems.php

案例总结:如果你需要APP_URL在 Laravel 项目的任何一个 php 文件中获取 value ,你可以通过调用config('app.env')函数来获取,不管最后执行的命令是php artisan config:clear还是php artisan config:cache,都无所谓。


情况 2(未预定义的密钥 - 如果您需要生成新的自定义环境密钥):请参阅此答案以进行解释:https ://stackoverflow.com/a/69707739/2877427

于 2021-10-25T12:05:52.537 回答
1

我知道这是一个非常古老的线程,原因可能不一样。但同样的问题也发生在我身上。

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

TEST="e@1asa

请注意,缺少结束引号。它应该是这样的,

TEST="e@1asa"

由于这个错误,我之后添加的所有环境变量都返回了 null。

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

于 2020-05-02T14:32:51.093 回答
1

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

于 2020-05-28T22:12:03.913 回答
1

请记住检查您的.env文件是否有重复的变量声明

STRIPE_PUBLISHABLE_KEY="why-wont-this-key-get-outputted"

#...

# Because at the bottom of the .env file it is unset like this
STRIPE_PUBLISHABLE_KEY=
于 2021-11-17T16:13:25.463 回答
1

尝试以下命令后

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

如果你仍然得到 nullenv('APP_ENV')然后试试这个app()->environment()。希望这不会返回null。这对我有用

于 2022-02-16T08:38:59.167 回答
0

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

将这些添加到 app.php 文件中。

try {
    (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    echo $e;
}
于 2020-05-20T07:41:51.343 回答
0

php 工匠配置:清除。请运行此命令,它将清除配置缓存。它的发生是因为配置文件被缓存并且在缓存时值必须为空。

于 2021-09-16T06:34:44.217 回答