关于Larave中.env读取偶发性失效问题
PHP

关于Larave中.env读取偶发性失效问题

是滑稽啊
2024-11-13 / 0 评论 / 8 阅读 / 正在检测是否收录...

相关问题

  1. .env设置了自定义参数,但env()函数读取失败只获取默认值
  2. 编辑.env没有生效
  3. 其他env问题

问题描述

在配置完.env后(增加了一些自定义KEY) 在程序中使用env()助手函数没有获取的键值。

在Larave文档相关操作说明(config):需要删除env缓存文件并重新生成。执行发现依然没有生效。

可是检查.env文件参数是没问题的,了解env()和config()区别后更是不解,明明用的env()的助手行数直接获取env文件中的参数,和缓存没有关系,但实际发现确实读取不到,获取的是env()参数二设置的默认值。最终也很疑惑希望知情之人能告知一二。

解决过程

  1. 检查.env配置文件中设置正确的参数
SERVICE_IP="42.XXX.XXX.163"

TENCENTCLOUD_SECRET_ID=AKIDgXXXXXXXXXXXXXXXXXXXXXXXXMtENL4
TENCENTCLOUD_SECRET_KEY=cwDPciXXXXXXXXXXXXXXXVYXLwKVWM
TENCENTCLOUD_CAPTCHA_APPID=1900000000
TENCENTCLOUD_APPSECRET_KEY=hi8XXXXXXXXXXXXXXXX6tqbU

WECHAT_APP_ID=wx000000000000ce
WECHAT_APP_SECRET=80cXXXXXXXXXXXXXXfb18
WECHAT_TOKEN=76976000000000000000acb834a
WECHAT_ENCODING_AES_KEY=u7u2B00000000000000001jZrv9
  1. 设置config配置参数
/config/services.php
return [
    ...
    'easywechat' => [
        'official_account' => [
            'app_id' => env('WECHAT_APP_ID', ''),
            'secret' => env('WECHAT_APP_SECRET', ''),
            'token' => env('WECHAT_TOKEN', ''),
            'aes_key' => env('WECHAT_ENCODING_AES_KEY', '')
        ],
    ],
    'tencentcloud' => [
        'secret_id' => env('TENCENTCLOUD_SECRET_ID', ''),
        'secret_key' => env('TENCENTCLOUD_SECRET_KEY', ''),
        'captcha_appid' => env('TENCENTCLOUD_CAPTCHA_APPID', ''),
        'appsecret_key' => env('TENCENTCLOUD_APPSECRET_KEY', '')
    ],
    'service_ip' => env('SERVICE_IP', '')
];
  1. 删除config缓存并重新生成
#清除config缓存文件
php artisan config:clear
#生成config缓存文件
php artisan config:cache
  1. 测试

请在需要获取参数的地方使用config()助手函数

dd(config('services.tencentcloud.captcha.appid'));
dd(config('services.service_ip'));

最优雅的方式env()方法不要在业务代码中使用,只在配置文件中使用。

拓展

一,最优雅获取配置方式

上述"解决过程"为最佳方式

二,助手函数中env()和config()区别

助手函数用途用法示例
env()函数用于直接从 .env 文件中读取环境变量。它主要用于在配置文件中读取环境变量,以便在不同的环境中使用不同的配置值。env('API_KEY', 'default_value');在.env文件中写法 API_KEY=your_api_key
config()用于从配置文件中读取配置值。配置文件位于 config 目录下,每个文件对应一个特定的配置领域。config('app.api_key');在/config/app.php写法 return ['api_key' => env('API_KEY', 'default_key')];

两者区别

读取来源不同:

  • env() 从 .env 文件中读取环境变量。
  • config() 从 config 目录下的配置文件中读取配置值。

使用场景不同:

  • env() 通常用于在配置文件中读取环境变量,以便在不同的环境中使用不同的配置值。
  • config() 用于在代码中读取配置文件中的配置值。

缓存机制不同:

  • env() 不会被缓存,每次调用都会从 .env 文件中读取。
  • config() 会被缓存,使用 php artisan config:cache 命令生成的缓存文件 bootstrap/cache/config.php 中读取配置值,提高性能。

三,关于env()获取为空原因

331235.png

0

评论

博主关闭了所有页面的评论