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

Tatsuo Ishii t-ishii @ sra.co.jp
2009年 8月 4日 (火) 19:36:48 JST


石井と申します。

> 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 メーリングリストの案内