- ベストアンサー
PostgreSQL8.1とPHP5でwebアプリをつくりたいのに環境設定がわかりません
- Linux初心者がPostgreSQL8.1とPHP5でwebアプリを作成するための環境設定がわかりません。現在の環境と設定ファイルについて説明しましたが、pg_connect()関数を使用すると接続エラーが発生します。
- php-pgsql拡張モジュールがインストールされているにも関わらず、configureに--with-pgsqlオプションが見当たらないことが問題です。configureをやり直す場所やオプションをリセットする方法が分かりません。
- PostgreSQL8.1とPHP5の環境設定で起きているpg_connect()関数の接続エラーについて詳しい方に教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
遅くなりました。 extension=php_pgsql.dll こちらは、最後がdllなのはWindows版です。 Linuxだと、 extension=php_pgsql.so ただ、モジュールが有効になっていないなら、エラー内容がfunction not definedなど関数が定義されてないよというものになるはずです。 今回は実行はしたけど、pg_connect内でエラーが起きてるってことになるので、そちらは除外してもいいのかなとおもいます。 現時点で考えられるのは、 1.SELinuxに引っかかっている fedora core 6とのことなので、デフォルトだとSELinuxが有効になっているのではないかなぁと。 それに引っかかっているって可能性は否定できません。 SELinuxがONになっているようであれば、試しにOFFにしてやって確認してみてはいかがでしょうか 2.普通に認証に引っかかっている これは原因もいくつか考えられます。 根本的な確認になりますが、まずpsqlコマンドでの接続はできますか? psqlコマンドで、postgres以外のユーザーだとどうでしょうか?
その他の回答 (1)
- kalze
- ベストアンサー率47% (522/1092)
とりあえず原因だけ。 Warningメッセージから判断すると、php-pgsqlはちゃんと動作しています。 ですので、 >調べてみたら php-pgsql という拡張モジュールがインストールされていたにも関わらずに、phpinfo() の configure に --with-pgsql が見当たらないのです。 >パッケージでインストールしたためにオプションが付いていなかったのでしょうか。 こちらのサイトで似たような質問があって読んだのですが、どこのディレクトリで configure をやり直したらいいのか、 >make clean コマンドで一回オプションを全て消さないとだめなのかがわからなくて困っています。 この部分は考えなくてよいです。 コンパイル時に組み込まずにモジュールとして組み込んでいるので。 Warningのメッセージを読みましたか? PostgreSQLに接続使用としたら問題が起きたってことです。 接続許可がないか、ポートが違うんじゃね?って言われてますね。 まずそのあたりを見直してみましょう。 ファイアーウォールの可能性もあります
お礼
お礼ではなくて回答への補足の続きなのですが、php.iniのなかに extension=php_pgsql.dll という記述がみあたらないのも問題の原因なのでしょうか?
補足
kalzeさん、早速の回答ありがとうございます。 ご指摘されたように、まずシステム管理でポート5432を開いてためしてみましたが、エラーでした。apacheのポート80もひらいているのですが…。 おそらく接続許可の問題であるかもしれないと思い、pg_hba.confを local all all trust host all all 127.0.0.1/32 ident sameuser host all all ::1/128 ident sameuser と書き直してreload後、やはり接続できませんでした。エラー内容も変わっていません。このpg_hba.conf内で apache に対してのアクセスをしなければならないのでしょうか? postgresql.confを listen_addresses = 'localhost' などとやってみたのですがやはりだめでした。 スクリプトでは pg_connect('host=localhost dbname=testdb port=5432 user=postgres'); というように記述していますが、どうもやはりpg_hba.confの問題であるような気がしてなりません。
お礼
kalzeさん、返答ありがとうございます。 >1.SELinuxに引っかかっている まさしくこれが原因だったらしくて、SELinux を無効にした途端に接続できてしまいました。 参考書などをみて、ブラウザに表示させたいファイルが置いてあるディレクトリを public_html にしているのですが、 restorecon -R /home/***(ユーザ名)/public_html/ というふうにして、ディレクトリの状態は drwxrwxr-x (ユーザ名)(ユーザ名) user_u:object_r:httpd_sys_content_t /home/***(ユーザ名)/public_html/ となっているので、こうすれば SELinuxが有効でも apache は public_html にアクセスできると書かれていたので、つい安心してSELinuxの設定まで目がいっていませんでした…。 適切なアドバイス、ありがとうございます!