[PHP-users 34682] Re: PostgreSQLへの接続が確立できない

NASUNO Isao isao.nasuno @ ctc-g.co.jp
2009年 8月 4日 (火) 22:57:50 JST


石井様

那須野です。
お返事、ありがとうございます。

不勉強で、UNIX ドメインソケットについてよく分からないのですが、
PHPの設定などとは関係なく、PostgreSQLの設定ということでしょうか。
それらしい設定をPostgreSQLについて見てみると(今、マシンが手元にないのですが)、

- /tmp/.s.PGSQL...というファイルはできていました。
  これが、UNIXドメインソケットを使っているということでしょうか。

- /tmp は、drwxrwxrwt になっていたと思います。
  なお、HTTPDはapacheユーザで起動していますが、ログインできないユーザとして
 定義しています。

- pg_hba.conf
    local all all trust  としています。
       

Tatsuo Ishii さんは書きました:
> 石井と申します。
> 
>> RedHat5の上で、Apache+PostgreSQL+PHPの開発をしています。
>> PostgreSQLへの接続が確立できないという状況に陥り、
>> 助言を求めたくて投稿した次第です。
>> CGIで動作するPHPだけが、PostgreSQLに接続できない状態です。
>>
>>
>> ●バージョン等
>>   - Apache 2.2.3 (pre-install)
>>   - PHP 5.2.5
>>   - PostgreSQL 8.3.5 (自分でコンパイル)
>>
>>   PHPは、CGI版としてコンパイルされているもので、
>>   (株)オークニーさんが、MapServerという製品のCGIとして販売しているものです。
>>   通常のCGI版と、特に変わりはありません。
>>
>> ●ソース
>> 以下のような簡単なソースでテストしています。
>> テーブルのレコード数を出すだけです。
>> ----------------------------------------------------------------------------
>> <?php
>> $link = pg_connect("dbname=DBNAME user=USER password=PASS port=xxxx");
>> $rs=pg_exec("select col from table");
>> $ct=pg_numrows($rs);
>> print($ct);
>> pg_close($link);
>> ?>
>> ----------------------------------------------------------------------------
>>
>> ●状況
>> 上記のソースをCGIとして実行させると、pg_connect() 実行時に、
>> 「Unable to connect to PostgreSQL server: could not create socket: Permission denied」
>> というエラーが発生します。
>>
>> CGI版PHPを、インタラクティブモードで(-a オプションで)、
>> まったく同じ内容を実行させると、正常動作します。
>> なので、PostgreSQL側には問題なさそうです。
>> 実際、同じマシンでJAVA/JSPも使っているのですが、javaからの接続はできます。
>>
>> Apache実行ユーザの環境と、インタラクティブモードで実行したユーザの環境の違いと
>> 思うのですが、どう解決してよいのかわかりません。
>> phpinfo(); を、CGI/インタラクティブモード の両者で実行した違いは、
>> 環境変数以外には違いがありませんでした。
> 
> おそらくUNIXドメインソケットをソケットを作れる/作れないという、実行ユー
> ザ権限の問題だと思います。ソケットを作るためのディレクトリ(デフォルト
> なら/tmp)のパーミッションはどうなっていますか?
> 
> ちなみにJavaはINETドメインソケットを使っているので、今回のエラーは関係
> ないです。
> --
> Tatsuo Ishii
> SRA OSS, Inc. Japan
> 



PHP-users メーリングリストの案内