テストサーバーをセットアップし、PHP 5.4 (Nginx を使用した zend サーバー) と postgresql 9.1 をインストールしました。
次のコードを使用して、postgresql データベースに接続しようとしています。
define('DB_TYPE', 'pgsql');
define('DB_HOST', 'localhost');
define('DB_PORT', 5432);
define('DB_NAME', 'rockprofile');
define('DB_USERNAME', 'rockprofile');
define('DB_PASSWORD', 'PASSWORD');
$dsn = DB_TYPE . ':dbname=' . DB_NAME . ';host=' . DB_HOST . ';port=' . DB_PORT;
try {
$db = new PDO($dsn, DB_USERNAME, DB_PASSWORD);
} catch (PDOException $e) {
echo $e->getMessage();
print_r($e->getTrace());
}
ただし、これにより次のものが生成されます。
SQLSTATE[08006] [7] FATAL: Ident authentication failed for user "rockprofile"
Array (
[0] => Array (
[file] => /usr/share/nginx/inc/config.php
[line] => 24
[function] => __construct
[class] => PDO
[type] => -> [args] => Array (
[0] => pgsql:dbname=rockprofile;host=localhost;port=5432
[1] => rockprofile
[2] => PASSWORD ) )
[1] => Array ( [file] => /usr/share/nginx/bands/index.php
[line] => 2
[args] => Array (
[0] => /usr/share/nginx/inc/config.php )
[function] => include ) )
ご覧のとおり、localhost を使用しています。localhost をローカルの 192 IP に置き換えると機能するため、ユーザー名とパスワードを含めて dsn が正しいことはわかっています。これは postgresql の構成に問題があると思われます。現在の内容は次のとおりです。
local all all peer
host all all 127.0.0.1/32 ident
host all all ::1/128 ident
host all all 192.168.1.0/24 md5
検索すると、上記の構成でidentをtrustに変更することでこれを解決するように見えましたが、私の場合は役に立ちませんでした。
おそらく追加する必要があるのは簡単なことですが、現時点では検索は役に立たないようです. 誰でもこれを修正する方法を教えてもらえますか。
*-----編集----- *
問題を修正するための Daniel Vérité の回答によると、ident を MD5 に変更する必要があります。個人的には、IPv4 と IPv6 の両方のエントリでこれを変更する必要がありました。
local all all peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
host all all 192.168.1.0/24 md5