PEAR DB のエラーに関する質問です。

httpd の再起動を行った結果、以下のエラーが出力されるようになってしまいました。
どうやら、ApacheとPostgreSQLの連携部分でトラブっているようなのですが、如何せん力不足で要領を得ていない状況です。

どなたか勘所のある方いらっしゃいましたら、ご回答宜しくお願い致します。


■出力エラーメッセージ
--------------------------------
DB Error: extension not found
--------------------------------

■動作環境
LAPP(Linux/Apache/PHP/PostgreSQL)

■ソースサンプル
$dsn = DSN;
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
die($db->getMessage());
}
$db->setFetchMode(DB_FETCHMODE_ASSOC);

$request->setAttribute('db', $db);

回答の条件
  • 1人5回まで
  • 登録:2006/06/28 11:38:22
  • 終了:2006/07/05 11:40:03

回答(4件)

id:vector_xenon No.1

vector回答回数113ベストアンサー獲得回数42006/06/28 11:47:57

ポイント23pt

DSNの記述が間違っていると思われます。

ユーザー名:user

パスワード:passwd

ホスト:host

DB名:db

として利用しているDSNを記述してみてくれませんか?

# そもそも定数DSNに何が入っているのかわかりませんし。

dummy

http://q.hatena.ne.jp/1151462301

id:lg-tsp

ご回答ありがとうございます。

早速DSNの中身を記述いたします。

おっしゃって頂いた形式に合わせた場合、以下のようなになります。

pgsql://user:passwd@localhost/db

それと、気になっているのは、

PHP - PostgreSQL の連携部分です。

こちらのページを参考に、色々試してはいるのですが、状況は好転しておりません。

http://cyberam.dip.jp/linux_server/www_db/app_main.html

2006/06/28 12:07:14
id:vector_xenon No.2

vector回答回数113ベストアンサー獲得回数42006/06/28 12:30:31

ポイント23pt

DSNは合ってますね。


似たようなものを見つけたので、参考にしてみてください。

http://ml.postgresql.jp/pipermail/pgsql-jp/2004-March/016129.htm...

[スレッド表示]

http://ml.postgresql.jp/pipermail/pgsql-jp/2004-March/thread.htm...


中を読む限りpg_hba.confの設定のようですが。

# hostを空白にしてみるとうまくいったりすることもあります

# pgsql://user:passwd@/db


起動オプションに-iがないのが気になりますが、関係あるかな。

id:takagimasahiro No.3

m-takagi回答回数23ベストアンサー獲得回数22006/06/29 12:49:52

ポイント22pt

DB Error: extension not found

このメッセージは、PHP の pgsql 関数が使用できない場合に出るものです。

コマンドラインから「php -m」を実行した結果を確認してください。[PHP Modules]の欄に「pgsql」が含まれていないのではないでしょうか。もしそうならば、まず PHP で pgsql 関数を使用できるようにしなければなりません。

こちらのページを参考に、色々試してはいるのですが、状況は好転しておりません。

http://cyberam.dip.jp/linux_server/www_db/app_main.html

このページの「PHP のインストール」のところに書いてあるとおりにやったのなら、使用できるようになっているはずなんですけどねぇ……。

id:lg-tsp

ご回答ありがとうございます。

ご指摘を受けて、「php -m」を実行してみましたが、どうやらpgsql関数は使用できるみたいです。。

[PHP Modules]

~

pgsql

~

[Zend Modules]

確かにおっしゃるあたりもかなり臭かったですが、どうやらpgsqlをphpからは利用できているみたいです。

かなりハマって困っています。。

うーん。どうしたものか…

2006/06/30 02:50:07
id:takagimasahiro No.4

m-takagi回答回数23ベストアンサー獲得回数22006/06/30 12:35:40

ポイント22pt

あら、そうでしたか…。では、テストスクリプトの先頭に、以下の行を追加して実行してみてください。

print_r(get_loaded_extensions());

表示された結果の中に「pgsql」は含まれていますか?

もし含まれているのなら、……ごめんなさい。私にはちょっと原因はわからなさそうです。

もし含まれていない場合、

  • コマンドライン版の PHP では pgsql 関数が使用できるが、Apache モジュール版では pgsql 関数が使用できないようになっている
  • 自分でインストールしたつもりのものとは別の PHP が使用されている (例えば「rpm などで既に PHP がインストールされていた」といったことが考えられます)

などの可能性が考えられます。

あと、ひとつ気になったのですが

早速DSNの中身を記述いたします。

おっしゃって頂いた形式に合わせた場合、以下のようなになります。

pgsql://user:passwd@localhost/db

これは、実際に確認してみた結果ですか?それとも「こうなっているはず」という推定ですか?

もし実際に確認していないのなら、

$dsn = DSN;

の次の行あたりに

print_r(DB::parseDSN($dsn));

と書いてみて、期待通りの内容になっているかどうかを確認してみることをお勧めします。まずないとは思いますが、「PostgreSQL に接続しているつもりが、実は別のデータベースを見に行っていた」なんていうオチもあり得ます。

id:lg-tsp

takagimasahiro さん、ご回答ありがとうございます。ご指摘に従って、

print_r(get_loaded_extensions());

を実行した結果、「pgsql」は含まれておりませんでした。す、鋭いっ。。

Array ( [0] => yp [1] => xml [2] => wddx [3] => tokenizer [4] => sysvshm [5] => sysvsem [6] => standard [7] => sockets [8] => shmop [9] => session [10] => pspell [11] => posix [12] => pcre [13] => overload [14] => mime_magic [15] => iconv [16] => gmp [17] => gettext [18] => ftp [19] => exif [20] => dio [21] => dbx [22] => dba [23] => curl [24] => ctype [25] => calendar [26] => bz2 [27] => bcmath [28] => zlib [29] => openssl [30] => apache2handler [31] => gd [32] => ldap [33] => mbstring [34] => mysql )

というわけで、まずは

・ApacheモジュールとしてのPHP上からpgsqlが利用できない

の件が目標と、解決の糸口を見つけようと進めてみました。

【参考】

http://ns1.php.gr.jp/pipermail/php-users/2002-August/009376....

http://ns1.php.gr.jp/pipermail/php-users/2001-December/00416...

Webをあさってみてはみましたが、Apacheモジュール版としてのPHPからpgsqlを利用するには、改めてpgsqlを組み込み直すしかないのでしょうかね??

httpdの再起動前までは、きちんと稼動していたので、何か他にやり方があるのではないかと探ってみているのですが、如何せん技術がついていかず…(泣)

なにか妙案があればとご教授願えませんでしょうか?宜しくお願い致します。

2006/07/04 01:48:04

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません