Laravel env()为null的问题

本文探讨了在Laravel框架中使用env()函数遇到的问题,特别是在Linux服务器环境下,该函数返回null的情况。文章分析了问题的原因,并提供了两种解决方案:清除配置缓存或使用config()函数替代。

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

同样的代码,在本地没有问题,在linux服务器上会出现授权失败的问题
授权使用了中间件,里面使用了Laravel自带的env()函数来获取当前的平台类型。
检查发现线上环境env函数返回的是null。

查找资料,发现是由于缓存的问题。

  • 服务器之前使用
 php aritisan config:cache

将配置文件缓存在了bootstrap/cache/config.php中。

  • 如果使用了这个config:cache,env函数只能在config目录下的配置文件的php里使用,不可以在其他地方使用。(why?如果有这个文件,env不会生成实例,所有访问得到的值为null
  • 详细原因 https://www.jianshu.com/p/83f9cd407751)
  1. 因此,可以通过取消这个缓存来解决
php artisan config:clear

就可以通过env(‘APP_NAME’)正常访问到env文件中的配置值了。

  1. 也可以将env(‘APP_NAME’)替换成config(‘app.env’),
    config函数会读取缓存目录下的值,如果找不到,会到config目录下寻找。
Laravel框架中,`.env`文件用于存储应用程序的配置信息。这些配置信息包括数据库连接、邮件服务器设置、应用程序密钥等。Laravel提供了多种方法来读取这些配置信息。 1. **使用`env()`辅助函数**: 你可以在配置文件中使用`env()`辅助函数来读取`.env`文件中的配置项。例如,读取数据库连接配置: ```php 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], ``` 2. **使用`config()`辅助函数**: 你可以在代码中使用`config()`辅助函数来读取配置文件中的配置项。例如,读取缓存配置: ```php $cacheDriver = config('cache.default'); ``` 3. **使用`$_ENV`和`getenv()`**: 你也可以直接在代码中使用`$_ENV`超全局变量或`getenv()`函数来读取环境变量。例如: ```php $appName = $_ENV['APP_NAME']; // 或者 $appName = getenv('APP_NAME'); ``` ### 示例代码 假设你在`.env`文件中设置了以下配置: ```env APP_NAME=Laravel DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=secret ``` 你可以使用以下代码来读取这些配置: ```php // 使用env()辅助函数 $appName = env('APP_NAME', 'Laravel'); // 使用config()辅助函数 $cacheDriver = config('cache.default'); // 使用$_ENV超全局变量 $dbHost = $_ENV['DB_HOST']; // 使用getenv()函数 $dbPort = getenv('DB_PORT'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值