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
此坑,折腾了一个下午,做个记录,希望能帮助到其他采坑同学。