gpt4 book ai didi

PHP & PostgreSQL – sslmode 值 "require"在未编译 SSL 支持时无效

转载 作者:可可西里 更新时间:2023-11-01 01:12:23 25 4
gpt4 key购买 nike

我正在尝试连接到仅支持 SSL 连接的 Heroku Postgres。 SSL 连接在其他工具 (Postico) 和编程环境 (Node.js) 中工作正常,但是从 PHP 连接时,我总是会收到此错误:未编译 SSL 支持时 sslmode 值“require”无效

我的本​​地环境是 OS X,所有的包都是用 homebrew 安装的,并且有 SSL 支持。 pgsql 也有基于 phpinfo() 输出的 SSL 支持:SSL 支持 => 已启用

Libpq 和 Postgres 编译时支持 SSL:-lpgcommon -lpgport -lssl -lcrypto -lz -lreadline -lm

PHP版本:7.2.5(也试过5.6、7.1分支)本地 Postgres 和 libpq 版本:10.3

尝试了所有可能但无法使此连接正常工作的解决方案。通过自制程序安装时,Postgres 支持为 PHP 7.2.5 编译开箱即用。不再有单独的 php-pgsql/php-pdo-pgsql 包。

最佳答案

错误信息很清楚,它来自PostgreSQL的libpq中的这段代码:

#ifndef USE_SSL
switch (conn->sslmode[0])
{
case 'a': /* "allow" */
case 'p': /* "prefer" */

/*
* warn user that an SSL connection will never be negotiated
* since SSL was not compiled in?
*/
break;

case 'r': /* "require" */
case 'v': /* "verify-ca" or "verify-full" */
conn->status = CONNECTION_BAD;
printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("sslmode value \"%s\" invalid when SSL support is not compiled in\n"),
conn->sslmode);
return false;
}
#endif

该代码仅在 PostgreSQL 配置 --with-openssl 时编译。

您可以使用 pg_config 进行验证(如果您没有从源代码安装 PostgreSQL,您可能必须为此安装“dev”或“devel”包):

pg_config --configure

输出将包含--with-openssl

很可能 PHP 是用 SSL 支持构建的,但 PostgreSQL 不是。

由于您说 PostgreSQL 是使用 SSL 支持编译的,对此行为的一种解释是您的机器上安装了多个 PostgreSQL,而 PHP 使用的是不支持 SSL 的构建。尝试在您的系统上找到所有名为 libpq.* 的文件!

关于PHP & PostgreSQL – sslmode 值 "require"在未编译 SSL 支持时无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50272266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com