- PR -

RedHat9 で PHP から PostgreSQL 接続。&別機からの接続方法

投稿者投稿内容
kami
ベテラン
会議室デビュー日: 2004/08/21
投稿数: 95
お住まい・勤務地: 大手町
投稿日時: 2004-08-21 05:32
はじめて、投稿致します。
今現在まる二日かかっても原因がわからず、是非お力をお借りしたいと思いここにきました。

環境。
OS:RedHat9
DB:PostgreSQL 7.3.4
PHP:PHP4

流れ。
RedHatなので、便利なapt-get install で
apt-get install postgresql
apt-get install postgresql-jdbc
apt-get install postgresql-devel
apt-get install postgresql-server
apt-get install postgresql-test
apt-get install postgresql-libs
を実行しインストールしました。
JdbcはそのうちJspから接続するためにと思い先に入れておいたものです。

DB: member テーブル:memberdb1 となっております。
PHPの接続部分ソース。  ローカルIPを指定してるが、DB本機からの接続です。

$DBHostName = "192.168.1.24";
$Port = "5432";
$DBName = "member";
$User = "postgres";  *又は別ユーザー[kami]
$Passwd = "";

// DB に接続
$con = pg_connect("host=$DBHostName port=$Port dbname=$DBName user=$User password=$Passwd");

で、接続しようとした際に
Fatal error: Call to undefined function: pg_connect() in /home/db.php on line 11
と、いうエラーが表示されできません。

@ITや、その他のサイトもしらべ、TCP/IPの設定なども気に係り以下のような事もしました。また、実際には本機からではなく別機からの接続が目的です。

/var/lib/pgsql/data/postgresql.conf の中身を
tcpip_socket = true
port = 5432

vi /var/lib/pgsql/data/pg_hba.conf  の中身を
host all all 0.0.0.0 0.0.0.0 trust

vi /etc/rc.d/init.d/postgresql    の中身を
su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl -D $PGDATA -p /usr/bin/postmaster -o '-p ${PGPORT} -o -i' start > /dev/null 2>&1" < /dev/null

設定をいじったのは上記のみです。
参考に致しましたサイトは
http://www.kvasir-sora.org/page/document/postgresql
http://www.itmedia.co.jp/enterprise/0307/18/epn20.html
http://www.hizlab.net/app/php2pgsql.html#pgfunc
http://www.hellohiro.com/jdbcpostgresql.htm
http://66.102.7.104/search?q=cache:j1SstuTIwGQJ:www.atmarkit.co.jp/bbs/phpBB/viewtopic.php%3Ftopic%3D12342%26forum%3D12%2611+jdbc7.1-1.2.jar&hl=ja
です。

なにとぞ宜しくお願い致します。
(間違いがあったので編集しました。)

[ メッセージ編集済み 編集者: kami 編集日時 2004-08-21 05:34 ]
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-08-21 07:04
PostgreSQL にばっかり目が行って、 PHP との「連携」で PHP -> PostgreSQL 呼び出し
が行われる事を忘れておられますな。libphp4.so っちゅぅ Shared Object(Library) に
 当該関数が含まれてないと、あぁいうメッセージが出ます。

configure の時、 $ ./configure --with-pgsql=shared とか言うオプション付けずに
make されたイメージをインストールされておられますな?

configure の時、指定オプションで必要な機能が取捨選択されるんで、何も付けないと
「連携」の事は無視されます。Apache のバージョンが古いと httpd.conf にも

LoadModule php4_module /usr/apache/libexec/libphp4.so

こういうのとか、他二箇所ほど挿入する必要があるかと。パスは各自の環境で変える必要が
ありますが。
kami
ベテラン
会議室デビュー日: 2004/08/21
投稿数: 95
お住まい・勤務地: 大手町
投稿日時: 2004-08-21 20:09
さっそくのご解答ありがとう御座います。

rpm -e php でアンインストし
Net上からphp-4.3.8をダウンロードしてきました。
で、tar xvfz php-4.3.8.tar.gz で解凍し移動。

その後、教えていただいた./configure --with-pgsql=sharedを行い
male , make install を行ないました。

しかし、rpm -aq|grep php でインストされているか確認すると
表示されません;;
このコマンドはRPMでインストールした場合のみなのでしょうか?

また、

 引用
 ――――――――――――――――――――――――――――――――
 LoadModule php4_module /usr/apache/libexec/libphp4.so

 こういうのとか、他二箇所ほど挿入する必要があるかと。パスは各自の環境で変える必要が
 ありますが。
 ――――――――――――――――――――――――――――――――

他二箇所。も教えていただきたく思います。

どうか、宜しくお願い致します。

updatecd を行い locate libphp.so をしましたが、見つけることが出来ませんでした。
似たようなものですと、libphp.module.in というファイルが見つかりました。

*updatedb〜を追記

[ メッセージ編集済み 編集者: kami 編集日時 2004-08-21 20:17 ]
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2004-08-21 21:47
こんばんわ.
引用:

kamiさんの書き込み (2004-08-21 20:09) より:

しかし、rpm -aq|grep php でインストされているか確認すると
表示されません;;
このコマンドはRPMでインストールした場合のみなのでしょうか?


はい.
rpm -qa とした場合は,rpm で導入したものの list を出力します.
なので,source から make; make install した場合は出力されません.
rpm で導入したいなら,source packege を取ってきて,
rebuild する必要があります.
./configure option を追加するくらいならそれほど困難ではないと思いますので,
source package を install して spec file を編集して
rpmbuild -bb すればよいかと思われます.
その後,生成された rpm package を普通に rpm -i して,
rpm -qa| grep php すれば出力されます.

余計な差し出口,申し訳ありません.
php の詳しいご説明はよろしくお願いいたします -> コブラ様
おっきー
大ベテラン
会議室デビュー日: 2003/05/01
投稿数: 104
投稿日時: 2004-08-21 22:47
php で postgres を扱う関数がないと言うエラーがでてるんですよね。
必要なパッケージがインストールされてないのではないでしょうか?

apt-get install php php-pgsql

でよかったりします。fedoralegacy.orgからとってきたパッケージは
マルチバイトの関数は使えませんが…。
kami
ベテラン
会議室デビュー日: 2004/08/21
投稿数: 95
お住まい・勤務地: 大手町
投稿日時: 2004-08-22 04:14
皆様、解答ありがとう御座います。

apt-get install php-pgsql
を実行させていただきました。
また、一回PHPをアンインストしていたこともありPHP周りを全て入れなおしました。
入れなおした所 libphp4.so がみつかり、無事httpd.confの方に追記いたしました。

で、早速PHPから接続を試みた所接続できませんでした。

設定のまとめ:
DB名:member テーブル名:memberdb1 です。
ユーザー名:kami 一時的なパスワードとして、qwer1234 です。

PHPソース(接続部分) −−−−−−−−−−−−−−−−−−−−−−

$con = @pg_connect("dbname=member user=kami passwprd=qwer1234");
if (!$con) {
die("データベースに接続できませんでした");

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

を、実行したところ "データ−ベースに接続できませんでした" の表示がでました。
この表示がでるということで 関数エラー ではなくなりました。

また、調べてみたところ ユーザー に対しての参照などの権限を与えなくてはいけない?
と、知り以下のコマンドを実行いたしました。

grant select,insert,update,delete on menberdb1 to kami;

コマンドを実行し、無事権限を与える事はできたのですがやはり接続できません。
(今考えるとこれはデータベース自体に接続できてからの事ですね^^;

上記のような流れです。
皆様、ご指導の程宜しくお願い致します。







コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-08-22 09:20
Postgres は勿論起動してますな?

postmaster とか。
後、 $ psql -l とか打ったら何て出ます?
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2004-08-22 12:37
psql 等のツールを使っても、データベースに接続して問題となっている SQL 文を実行することができないのでしょうか?
まずはそこがクリアにしておく必要があると思います。

$ psql -U kami memberdb1
Password: qwer1234
memberdb1=> (SQL 文)

スキルアップ/キャリアアップ(JOB@IT)