【问题标题】:PHP PDO can't connect to localhostPHP PDO 无法连接到本地主机
【发布时间】:2015-08-23 13:04:37
【问题描述】:

PHP:通过 Vagrant 在 ubuntu 虚拟机上使用 PHP 5.3.10 数据库:Postgres 9.3.2.0

我可以轻松连接到远程数据库;但是,当我尝试连接到我拥有的本地开发数据库时,出现错误

new PDO("pgsql:dbname=testdb;host=127.0.0.1;user=user1;password=tester;port=5432");

[Mon Jun 08 21:37:15 2015] [error] [client 10.0.2.2] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08006] [7] could not connect to server: Connection denied \n\t服务器是否在主机“127.0.0.1”上运行并接受\n\t端口 5432 上的 TCP/IP 连接?在 /lib/Db.inc:28\n堆栈跟踪:\n#0 /lib/Db.inc(28): PDO->__construct('pgsql:dbname=te...')\n#1 /www/ page1.php(9): Db->__construct('postgres://test...')\n#2 {main}\n 在第 28 行的 /lib/Db.inc 中抛出

我知道这不是连接问题,因为我的本地数据库已启动并运行良好

psql postgres://user1:tester@127.0.0.1/testdb

【问题讨论】:

  • 连接被拒绝 = 没有监听该 ip 和/或端口号,或者防火墙通过发送无法访问的 icmp 目标来主动拒绝连接。
  • 尝试删除端口,否则尝试端口 3306
  • @Szenis PostgreSQL,不是 MySQL ;)
  • 你可以psql到服务器吗?你能看到它在 top / ps / netstat 中运行吗?这听起来更像是一个配置,如果是这样的话,这是一个服务器故障问题。
  • 我可以 psql 进入服务器就好了

标签: php postgresql pdo psql


【解决方案1】:

我确实在 Fedora 23 上运行,在将 /var/lib/pgsql/data/pg_hba.confident 更改为 md5 后,我无法连接到 psql postgres://user1:tester@127.0.0.1/testdb。终于发现selinux阻塞了连接。

快速解决方法是将/etc/selinux/config 编辑为disabled 并重新启动。但是检查如何使用 selinux 和端口会是更好的解决方案。

【讨论】:

  • 我不知道为什么,但如果我在我的 linux 上花费最多 1 小时来面对一个问题,那么我不得不认为这肯定与 SELinux 系统有关,而且我总是正确的.无论如何,我认为这不是禁用 SELinux 的最佳做法,尤其是在它存在的环境中。在 Fedora 的情况下,只需写 'setsebool -P httpd_can_network_connect_db on',这样你就告诉 selinux 接受你的 apache 实现来连接“远程”(本地)数据库。
猜你喜欢
  • 2014-11-06
  • 2013-07-04
  • 2016-01-01
  • 2021-06-20
  • 2015-07-26
  • 2015-11-04
  • 2016-04-25
  • 2015-12-25
相关资源
最近更新 更多