2009年8月 5日

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

那須野です。

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

PostgreSQLユーザには登録しておらず、接続時にユーザ名を指定しています。


相変わらず、件のサーバが手元にないのですが、
CentOS5.2のテスト環境でSELinuxをenforcingにしてみたら、同じ現象が出ました。
本機も enforcing に設定されていることが分かりましたので、
石井さんのご指摘のとおりなのだと思います。

皆さま、ご指摘ご助言、ありがとうございました。


ml1@xxxxx さんは書きました:
>
> 他のWeb系の php からだとうまくいっているのでしたら別ですが、
> postgresqlのユーザーとして apache が登録されていますか?
>
> あまりに基本的な確認ですみません。
>
>
> ----- Original Message ----- From: "NASUNO Isao" <isao.nasuno@xxxxx>
> To: <php-users@xxxxx>
> 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 mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2009年8月 5日 17:10
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/87262
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。