わかりました、これは私が数週間頭を悩ませてきたことですので、我慢してください。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 とのこのタイプの接続をサポートしていませんか?