Laravel 5-env()始终返回 null

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

我的 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')

奇怪的是,$_ENV php 变量包含了 .env文件中的每一个变量。

94215 次浏览

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

php artisan config:cache

五个最重要的命令,如果你的 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

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

无论何时向应用程序 env 添加新变量(如“ key”) ,都需要使用 config:cache来重置缓存。

希望这个命令能救你

手工配置: 清除

在缓存了配置之后,env(...)函数将无法工作(从 laravel 5.2到当前的5.7)

Laravel 文档显示

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

所以正确答案是

如果从应用程序内部调用 env,强烈建议您向配置文件添加适当的配置值,并从该位置调用 env,从而允许您将 env 调用转换为配置调用。

我引用了同样的 文件

但对于一个快速解决方案而言,这种方法可以奏效:

php artisan config:clear

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

下面这个指挥官为我工作。 我不小心清空了所有的缓存文件,所以 env('something')返回 null。

php artisan optimize:clear

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

原因是我在.env 文件中有一个问题

TEST="e@1asa

注意结尾的引号不见了,应该是,

TEST="e@1asa"

由于这个错误,我添加的所有 env 变量都返回 null。

甚至没有写入错误日志。因此,如果遇到这个错误 尝试添加一个示例 env 变量作为文件的第一条记录。如果它工作和 记录终于不起作用了可能有一个错误内。Env

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

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

try {
(new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
echo $e;
}

如果接受的答案不能修复问题,请检查。Env 文件具有正确的读写权限。如果文件不能被框架/库读取,那么这些值将始终为 null。我曾经在我的一个 Lumen 项目中遇到过这个问题,但是在更改了文件权限之后,它工作了。

只需在 Laravel 项目根目录下运行这个命令

rm bootstrap/cache/config.php

Php artian config: clear . 请运行此命令,它将清除配置缓存。 之所以会发生这种情况,是因为配置文件被缓存,并且在缓存时值必须为空。

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

案例: 由于 Laravel 5.2,如果您直接调用 env("key"),那么如果您执行 php artisan config:cache作为最后一个命令,它总是返回 null

接受回答说 : 执行 php artisan config:clear作为最后的命令来解决问题!因为我们总是需要执行 php artisan config:cache作为最后一个命令。.

那么解决办法是什么?

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


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

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

enter image description here

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

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

Config (‘ app.env’) ;

这里的 app是 php 文件的名称,env 是由 app.php文件返回的数组的键。

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

Config (‘ filesystems.public.url’) ;

这里的 filesystems是 php 文件的名称,public是关键(级别1)url是关键(级别2)是数组的名称,它们是由 filesystems.php文件返回的。

这种情况的总结: 如果您需要在 Laravel 项目的任何 php 文件中获得 APP_URL的值,您可以获得 它通过调用 config('app.env')函数,不管最后的命令是否执行 是 php artisan config:clearphp artisan config:cache 一点都不重要。


案例2(非预定义密钥——如果需要生成新的自定义环境密钥) : 请参阅以下解释: < a href = “ https://stackoverflow. com/a/69707739/2877427”> https://stackoverflow.com/a/69707739/2877427

请记住检查 .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=

在尝试以下命令之后

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

如果仍然从 env('APP_ENV')得到 null,那么尝试这个 app()->environment()。希望这个不会返回 null。这对我有用

每当对.env 或任何其他配置文件进行任何修改时,始终清除配置缓存

php artisan config:clear