无法通过 PHP 连接到远程 PostgreSQL 服务器


Cannot connect to remote PostgreSQL server via PHP

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

笔记:

  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/目录中添加/取消注释extension=pgsql.soservice httpd restart.我什至已经打开了我的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

提前感谢:-)

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

应尝试将 host= 和 port= 部分保留在连接字符串之外。这听起来很奇怪,但这是Postgre的一个"选项"。如果您尚未在 postgresql.conf 中激活 TCP/IP 端口,则 postgresql 不接受来自 TCP/IP 端口的任何传入请求。