2

わかりました、これは私が数週間頭を悩ませてきたことですので、我慢してください。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 ソケット接続を確立しないのか、特にローカル接続を使用する MySQL データベース用の mysqli ライブラリを使用してかなりの数のスクリプトを作成した後では、私は何週間も完全に呆然としていました。しかし、最終的にループバック アドレスに関連する行のコメントを外したところ、魔法のように突然機能しました。これは、「localhost」が pg_connect のホスト パラメータとして渡されると、ローカルの Unix ソケットだけでなく、ループバック インターフェースを使用することを示しています。

それは世界の終わりではありませんが、ローカル Unix ソケット経由で接続する方法で PHP を使用する方法はありますか、それとも postgresql とのこのタイプの接続をサポートしていませんか?

4

1 に答える 1

3

host接続文字列に、UNIX ソケットを保持するディレクトリの値を設定します。

したがって、ソケットがオンになっている場合は、/var/run/postgresql/psql.sock次を試してください。

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

PHP docs ページの他のコメントはpg_connect、キー/値を完全に省略しても機能することを示していますが、host試していません。

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

于 2013-06-16T22:26:53.550 に答える