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

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
  • 回答数3
  • 閲覧数753
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.3

DBサーバー(PostgreSQL)  ←サーバー1のPHPからはリモートのDBサーバーへ接続可能  ←サーバー2のPHPからリモートのDBサーバーへ接続不可 ということなら、チェックすべきは ・サーバー2にphp-pgsql等の必要なモジュールがインストールされているか ・サーバー2のSELinux で リモートへのpg_connect を禁止していないか ・サーバー2のFirewallでOutbound方向をポート制限していないか ・DBサーバーのpg_hba.conf でIP制限していないか ・DBサーバーのFirewallでIP制限していない ・途中にルータやFirewallやL3スイッチがあるなら、それのIP制限やポート制限 かと思われますが、 pg_connect()で「Permission denied Is the server running on host」 ということなら SELinuxが怪しい気がしますので一度、setenforce 0 して試してみてはどうでしょう。 (これで成功するならselinuxをdisabledにするか、selinuxの設定で許可をいれるか)

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

質問者からのお礼

SELinuxでした。 SELinuxを止めたら繋がりました。

その他の回答 (2)

  • 回答No.2
  • shimix
  • ベストアンサー率54% (865/1590)

>$dbconn = pg_connect("host=dbserver.net port=5432 user=user1 password=password1 dbname=db1"); 実際のDBサーバのホスト名の指定はどうなっていますか?設定に左右されたくなかったら、localhostと書くほうがいいと思いますが・・・ (localhostでなく)ホスト名を書くと「外部アクセスと同じ扱いになる」ことがあるのは自宅サーバなどでもしばしば遭遇すると思います。さすがにネット上のDBサーバが外部アクセスを許可しているとは思えません(そもそもDBサーバより手前の段階で弾かれていると思う)。

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

質問者からのお礼

ありがとうございました。

  • 回答No.1
  • catpow
  • ベストアンサー率24% (619/2525)

ローカル環境のOSと、サーバ環境のOSでは、FireWallの設定が違っているんじゃないですか?

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

質問者からのお礼

有難うございます。 <ローカルWEBサーバー> # firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: enp0s25 sources: services: dhcpv6-client http https ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: <WEBサーバー> # firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh dhcpv6-client http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: ちなみに、双方 systemctl stop firewalld した後でも状況変わらずです。

関連するQ&A

  • 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からMySQLに接続することができません。

    PHPからMySQLに接続することができません。 解決方法をご存じの方は教えていただけないでしょうか。 PHPから、mysql_connect を行った際、以下のエラーが発生してしまいます。 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) 環境 OS:CentOS 5.3 DB:Mysql 5.0.67(ソースからインストール) Web:Apache PHPのソースの一部を以下に記します。   $db_host = 'localhost';//DB_NAME;   $db_user = 'user';//DB_USER;   $db_pass = 'pass';//DB_PASS;   $db = mysql_connect($db_host,$db_user,$db_pass); 以下の方法も試したのですが、エラーメッセージは変わりませんでした。   $mysql_connect("localhost:/tmp/mysql.sock","mysql","passwd") 端末のコマンドからMySQLへの接続は成功します。 ホスト名、ユーザー名、パスワードも上記と同一のものです。   $ /usr/local/mysql/bin/mysql -h localhost -u user -p   Enter password:pass 以上です。宜しくお願いします。

    • 締切済み
    • PHP
  • pg_connect関数

    すみません、質問させてください。 PostgreSQLでPHPの接続をしようと考えています。 Apache, PHP, PostgreSQLのインストールは終了 しています。 PHPのスクリプト内で、 if( !$pg_con=pg_connect("host=$hostname dbname=test user=nobody") ) { と記述して接続を試みているのですが、 Call to undefined function: pg_connect() ・・・ というエラーが出てしまいます。 どのように対処すればいいかアドバイスを下さい。 お願いいたします。

  • postgres に接続できない

    PHP4とpostgrs8.0を利用しています。OSはWINDOWS2000です。 $DB_SERVER="localhost"; $Port = "5432"; $DB_NAME="test"; $DB_UID="postgres"; $DB_PASS="abc"; define("DB_CONECT","host=$DB_SERVER port=$Port dbname=$DB_NAME user=$DB_UID password=\"$DB_PASS\""); という設定で pg_connect(DB_CONECT) の接続でエラーが発生します。 Warning: pg_connect(): Unable to connect to PostgreSQL server: FATAL: password authentication failed for user "postgres" in c:\*****.php on line 12 なぜでしょうか? pg_hba.confの設定で host all all 127.0.0.1/32 md5 を host all all 127.0.0.1/32 trust に変更すると接続できるのですが。 それは問題ないのでしょうか? またレンタルサーバーのpostgresを利用する場合、 その設定も個人で変更できるのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHP掲示板をネット上にで公開したい

    環境は Apache+PHP4+Postgres8です。 localでは、ちゃんと掲示板が表示され機能するのですが、 あるサイトのサーバーにアップすると、 Warning: pg_connect(): Unable to connect to PostgreSQL server: FATAL: Password authentication failed for user "postgres" in /home/macro/htdocs/imai/bbs/include/init.inc on line 2 DBへの接続に失敗しました! となってしまいます。 パスワードはあってると思うのですが。。 何が原因なのでしょうか? 途方にくれております。 どなたか教えていただければ大変たすかります。

  • 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
  • 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
  • postgresに接続できない

    環境はxp、apache2、php5、Postgresql8.2です。 ただ今PHPとPostgresqlの勉強をしています。 postgresに接続できなくて困っています。 <?php $d_base = pg_connect("user='postgres' password=xxxx dbname='test'"); //データベースに接続 で、エラーになり その内容は、 Warning: pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: could not connect to server: Connection refused (0000000000D/00000) Is the server running on host "???" and accepting TCP/IP connections on port 5432? in です。 ご教示して頂けたら幸いです。

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

  • PHPとPostgreSQLとの連携

    今、WindowsXPでPHPとPostgreSQLを連携 させたいのですがなかなか上手く行きません。 どなたか、分かる方がいれば宜しくお願いします。 環境 OS→Windows HomeEdition Apache→Apache HTTP Serber2.0.59 PHP→PHP4.4.4 PostgreSQL→PostgreSQL8.1.4 です。 PostgreSQLの中にtest_dbというデータベースをつくり setuzoku.phpから接続できるかどうかのif文を作り確認 していますが、何度やっても接続失敗と出ます。 <?php $con = pg_connect("user='postgres' dbname='test_db' password='grjtf'"); if (! $con) { print "接続失敗"; } else { print "接続成功"; } ?>