我正在尝试连接Heroku Postgres,它只支持SSL连接。SSL连接在其他工具(Postico)和编程环境(Node.js)中工作得很好,但是当从PHP连接时,我总是得到这个错误:sslmode value "require" invalid when SSL support is not compiled
我的本地环境是OS,所有的软件包都与自制软件一起安装,并支持SSL。另外,pgsql还支持基于phpinfo()的SSL输出:SSL support => enabled
Libpq和Postgres是使用SSL支持进行编译的:-lpgcommon -lpgport -lssl -lcrypto -lz -lreadline -lm
PHP版本: 7.2.5 (也尝试了5.6、7.1分支) Local Postgres和libpq版本: 10.3
我尝试了所有的解决方案,但都不能让这个连接正常工作。通过自制软件安装时,Postgres支持为PHP 7.2.5提供开箱即用的编译。不再有单独的php-pgsql/php-pdo-pgsql包。
发布于 2018-05-18 18:22:11
错误消息很清楚,它来自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.*的文件!
发布于 2018-12-22 13:24:19
我在Heroku上使用MAMP和PHP7.2.1连接到PostgreSQL时也遇到了同样的问题。尽管openSSL和pgsql SSL支持在phpinfo()中显示为启用,但仍然得到"sslmode value“要求”当SSL支持未编译时无效“。通过homebrew安装postgresql为我解决了这个问题。
brew install postgresql我想发帖,以防其他遇到同样问题的人也能用。
https://stackoverflow.com/questions/50272266
复制相似问题