您可以在PHP中使用pg_connect来仅使用本地unix域套接字吗?

时间:2013-06-16 22:22:36

标签: php linux postgresql unix

好的,这是我几个星期以来一直在喋喋不休的事情,所以请耐心等待。当我设置我的postgres数据库时,我只想通过本地Unix套接字连接到它。就像我设置我的MySQL数据库以及我为它编写的后续PHP脚本一样。因此,我的pg_hba.conf文件的底部如下所示:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
#host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
#host    all             all             ::1/128                 md5

我曾经,现在仍然可以通过psql命令行实用程序与我的数据库进行交互,并且可以做任何我需要做的事情。但是,当我尝试编写一个简单的PHP脚本来连接数据库时,它总是会失败:

<?php
$dbhost = "localhost";
$dbname = "postgres";
$dbuser = "postgres";
$dbpassword = "####";
$conn_string = "host=$dbhost dbname=$dbname user=$dbuser password=$dbpassword";
$dbconn = pg_connect($conn_string);
if($dbconn)
{
        echo "<p>Win!</p>";
}
else
{
        echo "<p>Connect failed!</p>";
        exit();
}
pg_close($dbconn);
?>
几个星期以来,为什么PHP不会建立一个简单的Unix套接字连接,特别是在使用mysqli库为我使用本地连接的MySQL数据库编写了相当多的脚本之后,我绝对不知所措!然而,我终于取消了与环回地址相关的行,并且像魔术一样突然起作用了!这告诉我,当'localhost'作为pg_connect的主机参数传递时,它使用环回接口,而不仅仅是本地Unix套接字。

这不是世界末日,但有没有办法以某种方式使用PHP,以便通过本地Unix套接字连接,或者它不支持与postgresql的这种类型的连接?

1 个答案:

答案 0 :(得分:3)

将连接字符串中的host设置为包含unix套接字的目录的值。

因此,如果套接字位于/var/run/postgresql/psql.sock,请尝试:

pg_connect("host=/var/run/postgresql dbname=..etc...");

pg_connect的PHP文档页面上的其他注释表明您也可以完全省略host键/值,它会起作用 - 但我还没试过。:

http://php.net/manual/en/function.pg-connect.php