Laravel 5 - env()始终返回null

时间:2017-04-06 00:27:39

标签: php laravel-5 environment-variables

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

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

11 个答案:

答案 0 :(得分:29)

希望这个命令会救你

  

php artisan config:clear

答案 1 :(得分:28)

env(...)函数在缓存配置后将不起作用。 (从laravel 5.2到当前的5.7)

Laravel documentation

  

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

所以正确的答案应该是

  

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

我引用了同一documentation

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

  

php artisan config:clear

现在应该很清楚为什么在尝试config:cache时,即使在缓存之前清除了配置,它也无济于事。

答案 2 :(得分:8)

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

map

答案 3 :(得分:6)

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

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

答案 4 :(得分:6)

使用\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来重置缓存。

答案 5 :(得分:3)

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

rm bootstrap/cache/config.php

答案 6 :(得分:2)

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

php artisan optimize:clear

答案 7 :(得分:1)

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

答案 8 :(得分:0)

看起来在服务器上安装了旧的PHP版本,Laravel的.env软件包无法正常运行。当我将网站部署到安装了PHP 7的其他服务器时,env()按预期返回值。

答案 9 :(得分:0)

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

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

TEST="e@1asa

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

TEST="e@1asa"

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

什么也没有写入错误日志。因此,如果遇到此错误,请尝试添加示例环境变量作为文件的第一条记录。如果它有效并且最后记录不起作用,则.env

内可能有错误

答案 10 :(得分:0)

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

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

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