• ベストアンサー
  • すぐに回答を!

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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数1399
  • ありがとう数11

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

  • ベストアンサー
  • 回答No.2
  • kalze
  • ベストアンサー率47% (522/1092)

遅くなりました。 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さん、返答ありがとうございます。 >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の設定まで目がいっていませんでした…。 適切なアドバイス、ありがとうございます!

その他の回答 (1)

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

関連するQ&A

  • PHPとPostgreSQLがつながらない

    PHPとPostgreSQLの初心者です。PHPとPostgreSQLを 使ってプログラムを作ろうと思ってます。 開発はPC上で、PostgreとPHPサーバはLinuxマシンに あります。まず最初にPostgreのインストールですが、 Fedora Core5 に着いていたPotsgreSQL8.1.3を入れ ました。設定としては、 postgresql.confでは listen_address='localhost,192.168.1.3' としました。192.168.1.3はLinuxマシンのローカル アドレスです。 pg_hba.confではconnectionのところで host all all 192.168.1.3 255.255.255.0 tyust としました。その後 host all all 0.0.0.0 255.255.255.0 tyust とかいろいろ試してみました。 一方PHPの方はほとんど何も設定をしていません。と いうか設定方法がよくわかりません。 以上の環境で、簡単なPHPプログラムをPostgreにつなげないで実行したところ問題なく動きました。 20行くらいのPHPを書いてみましたが、特に問題はあ りませんでした。 PostgreSQLの方は、PCからSSHで入って、接続テスト 用のDBを作り、テーブルも3つ作って、データを数件 Insertしました。 いよいよPHPからDBにつなぐことになったのですが、 プログラム上では以下のように書きました。 <?php    print "こんにちは"; $conn = pg_connect ('host=192.168.1.3 port=5432 dbname=phptest user=postgres');    print "こんばんは"; if (!$conn) { print "PostgreSQLへの接続に失敗です"; exit(); } else ・ ・ して実行したところ、「こんにちは」は表示されま したが、「こんばんは」以下はは表示しませんで した。$conn の先には進んでいないようです。 当然ここに書いた以外にも設定を変えてみましたが、 つながりませんでした。よろしくお願いします。

    • 締切済み
    • PHP
  • PHP5でpostgresqlのデータベースに接続する簡単なPHPプロ

    PHP5でpostgresqlのデータベースに接続する簡単なPHPプログラムを書きました。 ローカルホストにブラウザでアクセスすると正常に動作し、 コマンドラインで実行すると、次のエラーが発生します。 PHP Fatal error: Call to undefined function pg_connect() コマンドラインでphpのバージョンを見ると以下のとおりです。 C:\>php -v PHP 5.3.0 (cli) (built: Jun 29 2009 21:25:23) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies ブラウザで、phpinfo();を実行した際の情報には postgresqlのDBドライバがあります。 pdo_pgsql PDO Driver for PostgreSQL enabled PostgreSQL(libpq) Version 8.3.3 Module version 1.0.2 Revision $Id: pdo_pgsql.c,v 1.7.2.11.2.1.2.4 2009/03/28 01:58:49 mbeccati Exp $ pgsql PostgreSQL Support enabled PostgreSQL(libpq) Version 8.3.3 Multibyte character support enabled SSL support enabled Active Persistent Links 0 Active Links 0 Directive Local Value Master Value pgsql.allow_persistent On On pgsql.auto_reset_persistent Off Off pgsql.ignore_notice Off Off pgsql.log_notice Off Off pgsql.max_links Unlimited Unlimited pgsql.max_persistent Unlimited Unlimited テストソースです。パスワード・DB名は伏せています。 <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>PostgreSQLテスト</TITLE> </HEAD> <BODY> <?php $db_host = "localhost"; $db_port = 5432; $db_user = "postgres"; $db_pass = "xxxx"; $db_name = "yyyy"; // PostgreSQL 接続 if (!($cn = pg_connect("host=$db_host port=$db_port dbname=$db_name user=$db_user password=$db_pass"))) { die; } // PostgreSQL 切断 pg_close($cn); // 正常終了 print "<P>正常終了</P>"; ?> </BODY> </HTML> よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpからPostgreにconnectで失敗

    DBサーバーに対して、WEBサーバーからアクセスしています。 同じphpソースで同じDBにアクセスしているのに一方はconnectに成功して、一方は失敗します。 <前提> インターネット上のDBサーバーにPostgreSqlがあります。 それとは別のローカルWEBサーバーのphpからPostgreSqlのデータを読んでいてこれは上手く行っています。 ローカルWEBサーバーのコピー環境をインターネット上に立てようとしていますが、これが上手く行きません。 <DBサーバー> OS:CentOS7 dbms:PostgreSql host:dbserver.net port:5432 user:user1 password:password1 dbname:db1 設定ファイル /var/lib/pgsql/data/pg_hba.conf # PostgreSQL Client Authentication Configuration File # TYPE DATABASE USER ADDRESS METHOD host all user1 0.0.0.0/0 md5 設定ファイル # /var/lib/pgsql/data/postgresql.conf listen_addresses = '*' port = 5432 <ローカルWEBサーバー> host:test.local OS:CentOS7 Server version: Apache/2.4.6 (CentOS) Server built: Oct 19 2017 20:39:16 PHP 5.4.16 (cli) (built: Nov 15 2017 16:33:54) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies <php中のコネクト部分> <?PHP // PostgreSQL 接続をオープンする $dbconn = pg_connect("host=dbserver.net port=5432 user=user1 password=password1 dbname=db1");  :  :  : <セットアップ中のWEBサーバー> host:test.com OS:CentOS7 Server version: Apache/2.4.6 (CentOS) Server built: Oct 19 2017 20:39:16 PHP 5.4.16 (cli) (built: Nov 15 2017 16:33:54) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies <セットアップ中のWEBサーバーでのエラー> Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Permission denied Is the server running on host 同じ事をしているのに、どうして一方はconnectに失敗するのでしょうか?

    • ベストアンサー
    • PHP
  • PHPでpostgresql関数が利用できない

    PHPのバージョンアップ(4.1.2→4.3.1)をしたらpotgres関連の関数が利用できなくなりました。 (Fatal error: Call to undefined function: pg_connect() など) というか、phpinfo()でもpgsqlの表示がでません。バージョンアップする前のphpinfo()でConfigureの表示は--with-pgsql=sharedだったので、バージョンアップ時も同様にしてます。 php-pgsql-4.1.2-7.3.6というのがインストールされてるのですが、 これをphp-pgsql-4.3.xxxxxといったものにしなくてはならないのか? しかし、どこにあるのかわかりません・・・ php.iniのextension=pgsql.soが有効になってること、 pgsql.soがextension ディレクトリに存在していること、 コマンドラインからPostgresSQLに接続でいること、 以上の確認と Apache・PostgresSQLの再起動は行いました。 phpからPostgresSQLを利用できるようにする方法を教えてください。 (php-pgsql-4.3.xxxxxをインストールすべきであれば、DLできる場所) 以上、宜しくお願い致します。 【環境】 OS:RedHat7.2 httpd:apache-1.3.27 PostgresSQL:7.2.4

    • 締切済み
    • PHP
  • WinowsXPでPHPからPostgreSQLにアクセスできません。

    Windows上でPHPを利用してPostgreSQLにアクセスを試みているのですが Fatal error: Call to undefined function pg_connect() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\dbtest.php on line 13 というエラーが出てアクセスできません。 調べていくうちにnfo.phpのConfigure Commandに"--with-pgsq"がないのが原因とはわかったのですが、下記開発環境での[php.ini],[httpd.conf]の設定をいろいろ試しましたが(勿論再起動も)info.phpのConfigure Commandに"--with-pgsq"が表示されないのです。 どなたか、アドバイスしていただけることがありましたらよろしくお願いします。 開発環境 OS:WindowsXP SP2 PHP:5.26 Apache:2.2 PostgreSQL:8.2

    • 締切済み
    • PHP
  • ローカルWinXP環境でのPHP+PostgreSQL

    初歩的な質問で申し訳ありません。 PHP+PostgreSQLの勉強をしようと思い、WinXPのローカルマシン上にApache(1.3.27)+PostgreSQL(7.2.1)+PHP(4.3.0)をインストールしました。PostgreSQLを使わないでPHPだけだとブラウザで正しく表示されるのですが、PostgreSQLを使おうとするとエラーになります。 コーディングは $con = pg_connect("localhost port=**** dbname=**** user=*** password=***");です。 エラーは Call to undefined function: pg_connect() in~ でpg_connect未定義だと思います。 PHPのDLLのコピーはphp4ts.dll及びdllフォルダ中の全DLLをシステムファイルにコピーしています。 iniファイルはdoc_root、extension_dir、include_pathを設定しています。 何か拡張モジュールが必要なのでしょうか? それとも他にコピーするDLLがあるのでしょうか?もしくはiniファイルの設定不足なのでしょうか? よろしくお願い致します。

    • 締切済み
    • PHP
  • PHPでPostgreSQLに接続できない。

    PHPでPostgreSQLに接続しようとすると、 エラーメッセージが出て接続できません。 コマンドプロンプトからの接続は可能です。 環境:PHP5、Apache2.2、PostgreSQL8.24 全て同じサーバにインストールしています。 ********************************************* コマンドプロンプト ********************************************* >psql -U postgres -h localhost test >Password for user postgres::testpass >Type: \copyright for distribution terms >\h for help with SQL commands >\? for help with psql commands >\g or terminate with semicolon to execute query >\q to quit > > >test=# ********************************************* ↑問題なく接続できます。 ********************************************* ********************************************* PHP ********************************************* <?php $con = pg_connect("host=localhost dbname=test user=postgres password=testpass"); ?> ********************************************* エラーメッセージ 12行目は「pg_connect」のところになります。 Fatal error: Call to undefined function pg_connect() in C:\Program Files\Apache…test.php on line 12 ********************************************* php.ini ファイルはextension=php_pgsql.dll をアンコメントしてあります。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PostgreSQLのセキュリティのHBA設定で、IPアドレスとはどこで見付けることができますか?

    始めまして。linuxベースでPostgreSQLを使っています。 セキュリティを設定しようと思い、 /usr/local/pgsql/data/pg_hba.conf に host all 192.168.10.1 255.255.255.255 trust と勉強本にありますが、3項目めの IPアドレス と4項目めの アドレスマスクはどこで調べることができるのでしょうか?? そのIPアドレスはスーパーユーザーやローカルユーザーによって違いますか? もしよろしければ、教えていただきたいです!

  • PostgreSQLに接続できません(Windows XP)

    PHPを数日前から始めました。 表題の通り、Apache+PHP+PostgreSQLという組み合わせでWindowsXP上で、ユーザ認証ページを作っています。 バージョンは、 Apache:1.3.29 PHP:4.3.11 PostgreSQL:8.0.2 です。 ApacheとPHPはちゃんと動作していまして、データベース関連以外の関数は動きます。 ところが、PostgreSQLで無事に必要なテーブルを作って、PHPで呼び出そうとしたら、こんなエラーメッセージが帰ってきちゃったのです。 "Fatal error: Call to undefined function: pg_connect() " 同様な現象に関する質問メールをPHPユーザMLで見つけたのですが↓ http://ns1.php.gr.jp/pipermail/php-users/2004-February/020886.html "PHPインストール時のconfigure"の意味が分かりません。私は、PHPをWindows Installerで落としたので、 configure云々は実行しませんでした。もしかして、 やり方が違うのでしょうか? あまりに初歩的な質問で申し訳ないのですが、どなたか対策をお教えいただけませんでしょうか?

    • ベストアンサー
    • PHP
  • FreeBSDで、PHPとpostgreSQLを連携させたい

    かなり初心者です。 FreeBSDで、FTPのPackageからPHPとpostgreSQLをインストールしました。 Packageからの自動的なインストールだったので、 面倒な設定なく簡単にインストールが出来たのですが、 PHPのConfigure Commandには、--with-pgsql の設定がありませんでした。 この場合、PHPでpostgreSQLを操作できるようにするには、 どうしたらいいのでしょうか? PHP関連の書籍をみると、 拡張モジュールで組み込めるような事が書いてありますが、 状況が少し違っているようで、うまくいきません。 FreeBSD4.7R Apache1.3.27 PHP4.2.3 postgreSQL7-2-2 です。 よろしくお願い致します。