質問 |
||
| QNo.3399547 | PostgreSQL8.1とPHP5でwebアプリをつくりたいのに環境設定がわかりません… | |
|---|---|---|
| 質問者:polaroid |
Linuxの初心者です。PostgreSQLとPHP5でwebアプリをつくりたいのですが、環境が構築できずに困っています。現時点での環境を以下に記します。 OS ; Fedora Core 6 server ; apache 2.2.3 DB ; PostgreSQL 8.1.4 言語 ; PHP 5.1.6 Fedora Core 6 をインストールする時に apache と PostgreSQL と PHP はインストールされていました。そして以下の様に設定ファイルを書き直しました(今回の質問に関わりのなさそうなものは省いていますが、なにぶん初心者のため、なにか足りないものがありましたら教えていただきたいと思います)。 ・apache /etc/httpd/conf/httpd.conf 265 ServerName localhost:80 748 AddDefaultCharset EUC-JP ・PHP /etc/php.ini 777 pgsql.allow_persistent = On 781 pgsql.auto_reset_persistent = 0 784 pgsql.max_persistent = -1 787 pgsql.max_links = -1 791 pgsql.ignore_notice = 0 795 pgsql.log_notice = 0 ・PostgreSQL /var/lib/pgsql/data/postgresql.conf 49 listen_addresses = '*' 52 port = 5432 ・PostgreSQL /var/lib/pgsql/data/pg_hba.conf local all all ident sameuser host all all 127.0.0.1/32 ident sameuser host all all ::1/128 ident sameuser host all 0.0.0.0 0.0.0.0 trust スクリプト内で pg_connect() 関数を使って PostgreSQL に接続しようとすると、 Warning: pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: could not connect to server: Permission denied Is the server running on host "localhost" and accepting TCP/IP connections on port 5432? Warning: pg_last_error() [function.pg-last-error]: No PostgreSQL link opened yet というエラーが出てしまうのです。 調べてみたら php-pgsql という拡張モジュールがインストールされていたにも関わらずに、phpinfo() の configure に --with-pgsql が見当たらないのです。パッケージでインストールしたためにオプションが付いていなかったのでしょうか。 こちらのサイトで似たような質問があって読んだのですが、どこのディレクトリで configure をやり直したらいいのか、make clean コマンドで一回オプションを全て消さないとだめなのかがわからなくて困っています。 どなたか詳しい方がいらしたら、教えてください。 よろしくお願いいたします。 |
|
困り度:
|
||
| 質問投稿日時: 07/10/04 03:04 |
||
回答良回答20pt |
|
| ANo.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以外のユーザーだとどうでしょうか? |
|---|---|
| 回答者:kalze | |
| 種類:補足要求 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 07/10/06 06:08 |
|
| |
| この回答へのお礼 | 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の設定まで目がいっていませんでした…。 適切なアドバイス、ありがとうございます! |
回答 |
|
| ANo.1 | とりあえず原因だけ。 Warningメッセージから判断すると、php-pgsqlはちゃんと動作しています。 ですので、 >調べてみたら php-pgsql という拡張モジュールがインストールされていたにも関わらずに、phpinfo() の configure に --with-pgsql が見当たらないのです。 >パッケージでインストールしたためにオプションが付いていなかったのでしょうか。 こちらのサイトで似たような質問があって読んだのですが、どこのディレクトリで configure をやり直したらいいのか、 >make clean コマンドで一回オプションを全て消さないとだめなのかがわからなくて困っています。 この部分は考えなくてよいです。 コンパイル時に組み込まずにモジュールとして組み込んでいるので。 Warningのメッセージを読みましたか? PostgreSQLに接続使用としたら問題が起きたってことです。 接続許可がないか、ポートが違うんじゃね?って言われてますね。 まずそのあたりを見直してみましょう。 ファイアーウォールの可能性もあります |
|---|---|
| 回答者:kalze | |
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 07/10/04 15:28 |
|
| |
| この回答への補足 | 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の問題であるような気がしてなりません。 |
| この回答へのお礼 | お礼ではなくて回答への補足の続きなのですが、php.iniのなかに extension=php_pgsql.dll という記述がみあたらないのも問題の原因なのでしょうか? |