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

NASUNO Isao isao.nasuno @ ctc-g.co.jp
2009年 8月 5日 (水) 17:10:15 JST


那須野です。
> 他のWeb系の php からだとうまくいっているのでしたら別ですが、
> postgresqlのユーザーとして apache が登録されていますか?

PostgreSQLユーザには登録しておらず、接続時にユーザ名を指定しています。
相変わらず、件のサーバが手元にないのですが、
CentOS5.2のテスト環境でSELinuxをenforcingにしてみたら、同じ現象が出ました。
本機も enforcing に設定されていることが分かりましたので、
石井さんのご指摘のとおりなのだと思います。
皆さま、ご指摘ご助言、ありがとうございました。
ml1 @ k2street.com さんは書きました:
>> 他のWeb系の php からだとうまくいっているのでしたら別ですが、
> postgresqlのユーザーとして apache が登録されていますか?
>> あまりに基本的な確認ですみません。
>>> ----- Original Message ----- From: "NASUNO Isao" <isao.nasuno @ ctc-g.co.jp>
> To: <php-users @ php.gr.jp>
> Sent: Wednesday, August 05, 2009 9:13 AM
> Subject: [PHP-users 34686] Re: PostgreSQLへの接続が確立できない
>>>> 那須野です。
>>>> ありがとうございました!
>> そのセンで調べてみます。
>>>>>> Tatsuo Ishii さんは書きました:
>>> ということは、SELinux絡みのような感じですね。
>>> SELinuxは詳しくないのですが、たとえばこれが参考にならないでしょうか。
>>>>>> http://slashdot.jp/~shimashima/journal/450453?m=1
>>> -- 
>>> Tatsuo Ishii
>>> SRA OSS, Inc. Japan
>>>>>>> 不勉強で、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 メーリングリストの案内

AltStyle によって変換されたページ (->オリジナル) /