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

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> よろしくお願いします。

  • ne5
  • お礼率4% (5/124)

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

  • PHP
  • 回答数2
  • 閲覧数499
  • ありがとう数9

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

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

CLIでPHPを動かすと、見に行くphp.iniが違ったりします。 直接使用するphp.iniを設定するには、phpコマンドに「-c full_path」を指定する必要があります。 http://search.net-newbie.com/php/features.commandline.html

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

その他の回答 (1)

  • 回答No.1
noname#243182
noname#243182

-i スイッチを指定して PHP を実行すると、コマンドラインでの設定を確認することが出来ます。

参考URL:
http://www.php.net/manual/ja/features.commandline.options.php

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

関連するQ&A

  • 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がつながらない

    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
  • PHP mssql_connectで接続できません

    すみません。PHPからMSSQLサーバーに接続できずに困っています。 ブラウザを経由するとCentos上のPHPからWindowsのSQLサーバーに接続できない状態です。 コマンドラインからPHPを実行した場合は接続できるのですが、 同じPHPファイルにブラウザからアクセスした場合はなぜか接続エラーになってしまいます。 なぜブラウザからだと接続エラーになってしまうのか原因が分かる方はいらっしゃいますでしょうか? または同じ症状になったことがある方はいらっしゃいますか? PHPとfreeTDSは以下の様な記述になっています。 ■PHPの記述 $link = mssql_connect('MSSQL', 'ユーザー名', 'パスワード'); ■freeTDSの記述 [MSSQL] host = 192.168.0.1 port = 1433 tds version = 8.0 charset = UTF-8 client charset = UTF-8 language = japanese ■phpinfoのmssqlの情報 mssql MSSQL Support enabled Active Persistent Links 0 Active Links 0 Library version FreeTDS Directive Local Value Master Value mssql.allow_persistent On On mssql.batchsize 0 0 mssql.charset no value no value mssql.compatability_mode Off Off mssql.connect_timeout 5 5 mssql.datetimeconvert On On mssql.max_links Unlimited Unlimited mssql.max_persistent Unlimited Unlimited mssql.max_procs Unlimited Unlimited mssql.min_error_severity 10 10 mssql.min_message_severity 10 10 mssql.secure_connection Off Off mssql.textlimit Server default Server default mssql.textsize Server default Server default mssql.timeout 60 60 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP PDOライブラリが読み込まれない

    いつもお世話になっております。 PHP5+Apache(2.0)+PostgreSQLで開発しております。 OSはWinXP(Pro)SP2です。 PostgreSQLのみ別端末に入れております。 手始めにPDOでPostgreSQLに接続しようとしたところ、「PDOクラスがみつかりません」というようなエラーがでました。 $db = new PDO("mydsn"); ←ここで発生 phpinfo()関数で調べたところ、PDOのライブラリがロードされていないようです。 php.iniには extension_dir = "C:\php\php-5.2.0-Win32\ext" extension=pdo_pgsql.dll extension=php_pdo_pgsql.dll を記述しており、extension_dirには上記DLLが存在することも確認しております。またデータソースの設定として [PDO] pdo.dsn.mydsn="pgsql:host=xxx.xxx.xxx.xxx port=5432 dbname=mydb user=postgres password=sa" を最終行に追加しました。 Apacheの再起動も実行しました。 何か原因となるような箇所がございましたらご教授願います。宜しくお願いします。

    • ベストアンサー
    • 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
  • 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
  • PostgreSQLにphpから接続できない

    現在mac上にVisualBoxでCentOSをいれており その中にPostgreSQLでDBを作成しました。 phpでpg_conect、何も表示されません。 エラーメッセージもなしです。 phpの保存場所は/var/www/htmlです。 エラーもなしなので場所が悪いのでしょうか?? 初心者な質問ですいません。

  • PHPとPostgreSQL接続 (スキーマ)

    いつもお世話になっております。 現在、PHP(5.3.1)とPostgreSQL(9.2)で開発をしております。 エラーが発生しており大変困っております。 こちらが発生するエラーです。 Warning: pg_exec() [function.pg-exec]: Query failed: ERROR: schema スキーマが見つからないとのことです。 そして、以下がコードとなります。 <?php // PostgreSQL Connect if (!($cn = pg_connect("host=*** port=*** user=*** password=*** dbname=***"))) { die; } // PostgreSQL Select $sql = "select * from t_test.na1"; if (!($rs = pg_exec($sql))) { die; } // PostgreSQL Get Records $ct = pg_numrows($rs); for ($i = 0; $i < $ct; $i++) { $item = pg_fetch_array($rs, $i); $txt = "${item[1]}"; } // PostgreSQL Disconnect pg_close($cn); ?> 現在のデータベースのスキーマについてですが「na1」と「public」の2つが存在しています。 試しに、na1とpublicのテーブルをまったく同じにして SQLの部分を「select * from t_test」に変更すると「public」側のテーブルが覗けます。 しかし、SQLの部分を「select * from t_test.na1」に変更すると「スキーマが見つかりません」 というエラーが発生してしまいます。 スキーマがあるにもかかわらずこのエラーがでてしまうため原因が分からず困っております。 もしお分かりになる方いらっしゃいましたら、教えていただければと思います。 何卒よろしくお願いします。

    • ベストアンサー
    • PHP
  • RPM版PostgreSQLのアンインストールについて

    みなさん、こんばんは。 さっそくですが、質問があります。 現在サーバーを構築しているのですが、その中にpostgreSQLを入れて動かしたいのです。 使用OSはRedhat Linux 7.1JのFTP版で、始めからインストールされているpostgreSQLのRPM版をアンインストールして、最新版をインストールし直したいと 思っています。 (最新版はRPMのではなく、postgresql-7.1.3.tar.gzをインストールするつもりです。) そこで、rpm -eコマンドでpostgreSQLをアンインストールしたいのですが、 postgresql-7.0.3-8とpostgresql-devel-7.0.3-8を削除しようとしても下記の様なエラーが出て、アンインストールできません。 rpm -e postgresql-devel-7.0.3-8 とすると・・・・  エラー:これらのパッケージを削除すると依存性を破壊します。  postgresql-devel >= 7.0は perl-DBD-Pg-0.95-1に必要とされています。 rpm -e postgresql-7.0.3-8 とすると・・・  エラー:これらのパッケージを削除すると依存性を破壊します。  postgresql = 7.0.3はpostgresql-devel-7.0.3-8に必要とされています。  postgresqlはphp-pgsql-4.0.4pl1-9に必要とされています。  libpq.so はperl-DBD-Pg-0.95-1に必要とされています。  libpq.so はphp-pgsql-4.0.4pl1-9に必要とされています。 いったいどうやったら、削除できるのでしょうか? どなたか教えてください。

  • データベースに接続できない

    postgresql-7.2.3.tar.gzインストール時には、下記内容でデータベースに接続できていました。 <?php $con = pg_connect("dbname='database_6' user='postgres' password='xxx'") if(!$con){ print "DB connection failed!!\n"; }else{ print "DB connection successful!!\n"; } ?> ところが、postgresql-8.0.26.tar.gzをインストールしたら、上記内容でデータベースに接続できなくなり、 Fatal error: Call to undefined function: pg_connect() in /usr/local/apache/htdocs/sql.php on line 2 というエラーメッセージが表示されます。 phpinfo();で確認もしましたが、ない感じです。Additiional Modulesのどこかを見れば、いいのでしょうか? pgsql.soは/usr/local/lib/php/extentions/pgsql.soにあります。/usr/local/lib/php.iniのextention_dir = ./を以下のように修正し、 extention_dir = /usr/local/lib/php/extentions extention=pgsql.so /usr/local/apache/bin/apachectl restart も実行しています。