php env 函数不存在,laravel 为什么 env 函数没有作用?

本文探讨了在Laravel开发中遇到的问题:在使用config:cache命令后,业务代码中调用env()获取环境变量时出现的无法获取的情况,并解释了原因及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 laravel 开发中遇到了这样的问题,业务代码中调用 env() 获取环境变量,结果无法获取。

原因如官方文档所述:为了给你的应用程序提升速度,你应该使用 Artisan 命令 config:cache 将所有的配置文件缓存到单个文件中。这会把你的应用程序中所有的配置选项合并成一个单一的文件,然后框架会快速加载这个文件。

通常来说,你应该把运行 php artisan config:cache 命令作为生产环境部署常规的一部分。这个命令不应在本地开发环境下运行,因为配置选项在应用程序开发过程中是经常需要被更改的。

如果在部署过程中执行 config:cache 命令,那你应该确保只从配置文件内部调用 env 函数。

意思是说,在你的业务代码中,不能使用 env() 方法。

原因何在?

在 Laravel 中,如果执行 php aritisan config:cache 命令,Laravel 将会把 app/config 目录下的所有配置文件“编译”整合成一个缓存配置文件到 bootstrap/cache/config.php,每个配置文件都可以通过 env 函数读取环境变量,这里是可以读取的。但是一旦有了这个缓存配置文件,在其他地方使用 env 函数是读取不到环境变量的,所以返回 null.

让我们看看这段代码,Illuminate/Foundation/Bootstrap/DetectEnvironment.php line 18:public function bootstrap(Application $app)

{

if (! $app->configurationIsCached()) {

$this->checkForSpecificEnvironmentFile($app);

try {

(new Dotenv($app->environmentPath(), $app->environmentFile()))->load();

} catch (InvalidPathException $e) {

//

}

}

}

这个方法在框架启动后就会运行,如果存在缓存配置文件,就不会去设置环境变量了。

因此,在配置文件即 app/config 目录下的其他地方,读取配置不要使用 env 函数去读环境变量,这样你一旦执行 php artisan config:cache 之后,env 函数就不起作用了。所有要用到的环境变量,在 app/config 目录的配置文件中通过 env 读取,其他地方要用到环境变量的都统一读配置文件而不是使用 env 函数读取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值