【问题标题】:Error connecting a remote server from a PHP page从 PHP 页面连接远程服务器时出错
【发布时间】:2021-04-20 22:29:17
【问题描述】:

我有一个 .php 文件,它应该接收并显示来自远程数据库的数据。我从 PHPStorm(通过“数据库”右侧窗格连接到远程数据库)和浏览器运行我的程序。两种方式我都会得到一个错误,这取决于我传递给 pg_connect() 函数的参数数量。 如果我使用

$dbconn = pg_connect("host=pg hostaddr=server.address.ru port=5432 dbname=studs user=... password=...")

错误是

Unable to connect to PostgreSQL server: could not parse network address "server.address.ru": Unknown host in...

但是我确定我写的地址是正确的(里面没有错别字)。这样我不确定传递的参数格式的正确性。

如果我使用

$dbconn = pg_connect("host=server.address.ru dbname=studs user=... password=...")

命令,错误是

pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Connection timed out

我找到了很多关于这个错误的信息,但它主要是指本地主机并且不能解决我的问题。我想,问题可能出在函数中设置此连接的方式上,但我不知道为什么它不能正常工作。我该如何解决?

【问题讨论】:

  • “远程”有多远?第二种形式看起来像是在尝试连接,但远程服务器要么处于脱机状态,要么位于阻止连接的防火墙后面。在公共互联网上很难找到可访问的数据库服务器。
  • 其实我是通过 SSH 从 PHPStorm 连接到这个服务器的(连接测试成功)。这里写的是“server.address.ru”,而不是我创建 SSH 隧道时在“host”字段中写的。目前它没有离线(我可以通过 PuTTY 连接到它)。
  • 那可能是你的问题。您需要一个 SSH 隧道来连接。正如我所料,直接连接被阻止。至于您的下一个问题(如何设置 SSH 隧道?)this question 可能会有所帮助。

标签: php postgresql server


【解决方案1】:

感谢@TangentiallyPerpendicular,我找到了正确的连接方式。但由于我有 PostgreSQL 远程连接,所以不仅仅是 this 的答案。 我做了什么以及如何设置连接(我在 PHPStorm 工作,所以所有操作都基于这个平台):

  1. 打开 PuTTY 并在服务器的 DB 端口(对于 PostgreSQL,通常为 5432)和本地计算机的 PostgreSQL 端口(通常也是 5432)之间设置 SSH 连接(SSH 隧道)。您可以从命令行执行相同的操作。
  2. 打开 PHPStorm 并在“数据库”部分(环境右侧的图标或设置中的“数据源和驱动程序”)设置一般信息(“常规”部分)并设置另一个 SSH 隧道(“SSH /SSL”)。在 SSH 配置(相同的“SSH/SSL”部分)中设置一个本地端口 - 这对我们的连接很重要!假设这个端口是 20000。您要连接的服务器的端口是一个普通端口(通常是 22 或 2222)。
  3. 在程序中正确使用函数是$dbconn = pg_connect("host=localhost port=20000 dbname=studs user=... password=...") or die('Error: ' . pg_last_error());

连接已设置。 对于那些在通过 PHP this 使用远程 PostgreSQL 设置 SSH 隧道时遇到问题的人来说也很有用。

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 2012-04-20
    • 2020-06-02
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2015-05-14
    相关资源
    最近更新 更多