PostgreSQL 13与PHP 7.1认证问题:CMD连接报错但浏览器正常
问题解决思路
问题根源
PostgreSQL 13默认采用scram-sha-256(认证方法编号10)作为本地连接的认证方式,但PHP 7.1自带的php_pgsql.dll不支持该认证协议。浏览器运行正常是因为Web环境的连接来源(比如Apache/Nginx的进程身份)在PostgreSQL的认证规则里被允许使用其他兼容的认证方式,或者Web用的PHP配置和CLI环境存在差异。
具体解决步骤
修改PostgreSQL认证配置
- 找到PostgreSQL安装目录下的
data/pg_hba.conf文件(比如默认路径C:\Program Files\PostgreSQL\13\data\pg_hba.conf) - 找到对应本地IP连接的配置行,通常是类似
host all all 127.0.0.1/32 scram-sha-256的内容 - 将认证方式从
scram-sha-256改为md5,修改后该行变为:host all all 127.0.0.1/32 md5 - 重启PostgreSQL服务(可以在Windows服务列表里找到PostgreSQL 13服务,右键重启)
- 找到PostgreSQL安装目录下的
验证PHP环境一致性(可选)
在CMD中执行php -i,查看Loaded Configuration File项,确认CLI使用的php.ini是否和Web环境一致。如果不一致,检查CLI的php.ini是否开启了php_pgsql.dll扩展,但这不是核心问题,核心还是认证协议兼容问题。
关于php_pgsql.dll的说明
PHP 7.1官方版本的pgsql扩展确实不支持scram-sha-256,该认证方式是从PHP 7.4版本开始才加入支持的,所以找不到对应PHP7.1的兼容版本是正常的,无需浪费时间搜索。
内容的提问来源于stack exchange,提问作者Hristian Yordanov
相关产品推荐
相关产品推荐

