人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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);

●質問者: lg-tsp
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Apache CONNECT dB DSN httpd
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● vector
●23ポイント

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

ユーザー名:user

パスワード:passwd

ホスト:host

DB名:db

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

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

dummy

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

◎質問者からの返答

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

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

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

pgsql://user:passwd@localhost/db

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

PHP - PostgreSQL の連携部分です。

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

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


2 ● vector
●23ポイント

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がないのが気になりますが、関係あるかな。


3 ● m-takagi
●22ポイント

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 のインストール」のところに書いてあるとおりにやったのなら、使用できるようになっているはずなんですけどねぇ……。

◎質問者からの返答

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

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

[PHP Modules]

~

pgsql

~

[Zend Modules]

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

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

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


4 ● m-takagi
●22ポイント

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

print_r(get_loaded_extensions());

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

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

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

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

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

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

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

pgsql://user:passwd@localhost/db

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

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

$dsn = DSN;

の次の行あたりに

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

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

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ