[PHP-users 11411] Re: DBクラスでpgsqlに接続できません。

UNO Shintaro php-users@php.gr.jp
Mon, 11 Nov 2002 04:02:28 +0900


>DBクラスを使って、PostgreSQLとMySQLへ接続できるかテストしているの
>ですが、PostgreSQLだけ接続できません(connect failed)。PHPのソー
>スは以下のような、単純なものです。PHPは4.2.3、PostgreSQLは7.2.3、
>OSはRedHat7.3です。
(略)
>	$dsn = "pgsql://nobody:@localhost/tsumori";
>	$db = DB::connect($dsn);
(略)
>> Warning: pg_connect() unable to connect to PostgreSQL server: could not connect to server: 接続を拒否されま した Is 
>the server running on host localhost and accepting TCP/IP connections on port 5432? in /usr/local/ lib/php/DB/pgsql.php 
>on line 121
>> ERROR: connect failed
(略)
>PHP4.2.2でこのスクリプトを走らせると、PostgreSQLでも動作します。
>
>これはPHP4.2.3のバグと考えて良いのでしょうか。よろしくお願い致し
>ます。

PHP4.2.2 での動作確認って、多分別の(マシン or 環境)でなさってますよね?
それとも、同じ環境でPHPだけ入れ替えて確認なさってますか? 
別の(マシン or 環境)で確認なさっているのであれば:

単に PostgreSQL サーバの設定が異なっていて、 PHP4.2.3 側の環境では 
TCP/IP 経由の接続が拒否されている、ということに見えます。

多分、psql での接続確認を psql tsumori nobody のようになさっていると思
いますが、DSN に明示的に「:@localhost」をつけた場合の接続と等価な接続
を確認するには、psql -h localhost tsumori nobody のように psql にも明
示的にホスト名を指定する必要があります。
ホスト名を指定した場合は TCP/IP 経由での接続、ホスト名を指定しない場合
(で環境変数 PGHOST もない場合)は UNIX ドメインソケット経由でのローカ
ル接続が用いられます。(psql のマニュアルをご覧になってください。)

-- 
UNO Shintaro, 宇野 信太郎
mailto:uno@venus.dti.ne.jp
http://www.venus.dti.ne.jp/~uno/