こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PostgreSQL8.1とPHP5でwebアプリをつくりたいのに環境設定がわかりません…

 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 コマンドで一回オプションを全て消さないとだめなのかがわからなくて困っています。
 どなたか詳しい方がいらしたら、教えてください。
 よろしくお願いいたします。

投稿日時 - 2007-10-04 03:04:55

QNo.3399547

すぐに回答ほしいです

質問者が選んだベストアンサー

遅くなりました。

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以外のユーザーだとどうでしょうか?

投稿日時 - 2007-10-06 06:08:43

お礼

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の設定まで目がいっていませんでした…。

適切なアドバイス、ありがとうございます!

投稿日時 - 2007-10-06 10:42:36

ANo.2

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

とりあえず原因だけ。

Warningメッセージから判断すると、php-pgsqlはちゃんと動作しています。
ですので、
>調べてみたら php-pgsql という拡張モジュールがインストールされていたにも関わらずに、phpinfo() の configure に --with-pgsql が見当たらないのです。
>パッケージでインストールしたためにオプションが付いていなかったのでしょうか。
こちらのサイトで似たような質問があって読んだのですが、どこのディレクトリで configure をやり直したらいいのか、
>make clean コマンドで一回オプションを全て消さないとだめなのかがわからなくて困っています。
この部分は考えなくてよいです。
コンパイル時に組み込まずにモジュールとして組み込んでいるので。

Warningのメッセージを読みましたか?
PostgreSQLに接続使用としたら問題が起きたってことです。
接続許可がないか、ポートが違うんじゃね?って言われてますね。
まずそのあたりを見直してみましょう。
ファイアーウォールの可能性もあります

投稿日時 - 2007-10-04 15:28:50

補足

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の問題であるような気がしてなりません。

投稿日時 - 2007-10-04 23:56:07

お礼

お礼ではなくて回答への補足の続きなのですが、php.iniのなかに

extension=php_pgsql.dll

という記述がみあたらないのも問題の原因なのでしょうか?

投稿日時 - 2007-10-05 00:30:10

あなたにオススメの質問