好的,这是我几个星期以来一直在喋喋不休的事情,所以请耐心等待。当我设置我的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的这种类型的连接?
答案 0 :(得分:3)
将连接字符串中的host
设置为包含unix套接字的目录的值。
因此,如果套接字位于/var/run/postgresql/psql.sock
,请尝试:
pg_connect("host=/var/run/postgresql dbname=..etc...");
pg_connect
的PHP文档页面上的其他注释表明您也可以完全省略host
键/值,它会起作用 - 但我还没试过。: