【问题标题】:Cannot connect to remote PostgreSQL server via PHP [duplicate]无法通过 PHP 连接到远程 PostgreSQL 服务器 [重复]
【发布时间】:2015-03-08 22:01:37
【问题描述】:

通过远程 IP 地址连接到 PostgreSQL 数据库,我已经使用 pgAdmin III 通过 Windows 成功,但是每当我尝试使用标准 php-pgsql 库使用 @987654323 从本地 CentOS 6 Apache Web 服务器连接时都会出错@。

注意事项:

  1. 我无法控制远程服务器,但如果需要可以查询其他信息。
  2. 我的密码确实包含一个特殊字符(虽然它不是引号字符)。

积分如下:

Host (IP): xx.xx.xx.xx
Port: 5432
DBname: sandbox
Username: abc
Password: ***
MaintenanceDB: template1

这是我尝试在本地服务器上运行的 PHP 代码:

pg_connect("host=xx.xx.xx.xx port=5432 dbname=sandbox user=abc password=***");

我也试过了:

pg_connect("host=xx.xx.xx.xx port=5432 dbname=template1 user=abc password=***");

当我尝试连接时,我收到以下错误:

Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Permission denied Is the server running on host "xx.xx.xx.xx" and accepting TCP/IP connections on port 5432?

我已在/etc/php.d/ 目录和service httpd restart 中添加/取消注释extension=pgsql.so。我什至已经打开了我的iptables 端口,所以毫无疑问本地防火墙端口被阻止:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 5432 -j ACCEPT

提前致谢:-)

【问题讨论】:

  • 您确定登录凭据正确吗?
  • 我能够通过 pgAdmin III 进行连接,这表明凭据正确并且已启用远程访问。我不确定维护数据库如何适应 PHP 端(也许是 OPTION 参数?)以及是否还有其他我遗漏的东西。
  • 对我来说,看起来像防火墙问题。你能暂时禁用 CentOS 上的防火墙,然后再试一次吗?
  • 上周我也遇到了同样的问题,看看这个:stackoverflow.com/questions/27749691/…
  • 请注意我的重复投票:当尝试与 postgres 建立 TCP 连接 时,关键是 Permission denied。 CentOS/Redhat 上的这种特殊组合总是由于 SELinux 未配置为允许 HTTP 服务器发出出站连接。

标签: php postgresql php-pgsql


【解决方案1】:

根据您的 postgresql 连接问题,此解决方案可能有效。我只是从 php 手册中得到这个答案,我不确定,所以请在此处查看更多信息http://php.net/manual/en/function.pg-connect.php#38291

您应该尝试将 host= 和 port= 部分排除在连接字符串之外。这听起来很奇怪,但这是 Postgre 的“选项”。如果您没有在 postgresql.conf 中激活 TCP/IP 端口,那么 postgresql 不会接受来自 TCP/IP 端口的任何传入请求。

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 2015-10-28
    • 1970-01-01
    • 2023-04-08
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2015-01-22
    相关资源
    最近更新 更多