Dotenv 坑一枚, “#”问题导致数据丢失

本文记录了一次使用PHP dotenv库时遇到的问题,即高版本的phpdotenv支持行尾注释符号,导致配置文件中的密码被误解析,最终通过降级到2.6.1版本解决了连接Redis的密码错误问题。

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

Dotenv 不介绍了,反正php的今天配置都用它.env。不知道的自己补一下课。

之前用.env的时候,配置文件中的密码字段使用了 wsde346gf#redis 这样的密码。类似这样

#环境配置[local | dev | prod]
APP_ENV=local

#调试参数:线上环境必须改为false
APP_DEBUG=true

APP_KEY=40e8dbd8a3850a6a89e55ea6a797d784
APP_TIMEZONE=PRC

#===redis===
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_DB=2
REDIS_PASSWORD=1234567#redis

新项目的时候composer.json中使用了这个方式 "vlucas/phpdotenv": "~2.2",结果安装好后,phpdotenv的版本自动升级到3.4。

此处引入了一个问题,高版本的 phpdotenv,支持行尾注释 “#”的识别(看了源码后发现增加了这个功能,在vendor/vlucas/phpdotenv/src/Parser.php文件中parseQuotedValue函数),所以 1234567#redis 这个密码变成了 1234567,后面的 #redis丢了,导致连接密码错了,无法连接redis。

最后在老项目的 composer.lock 中找到老版本是 2.6.1,果断降级使用老版本,问题解决。

composer require vlucas/phpdotenv:2.6.1

此坑,折腾了一个下午,做个记录,希望能帮助到其他采坑同学。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值