PHP、PEARについて質問です。


XAMPPで標準についてるPEARを試すために、とりあえずDB.phpを使ってみようと思い、
「require_once("DB.php");」としてみたところ、下記のようなエラーがでました。

Warning: require_once(PEAR.php): failed to open stream: No such file or directory in D:\xampp\htdocs\cake\Test\DB.php on line 30

これは具体的には何をどのように改善したら、うまくincludeできるのでしょうか?
ちなみにphpinfo()で確認したところ、include_pathは「.;D:\xampp\php\PEAR」となっていました。

また、PEARはライブラリーとして古く使うべきではないと
どこかで聞いたことがあるのですが、それは本当なのでしょうか?
もしかわりになるライブラリーがありましたらあわせておしえてください。

環境は最新のVista Home Premium、最新のXamppのPHP5、プラウザはIE,Firefoxです。
以上、よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/04/21 02:37:34
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tobeoscontinue No.2

回答回数220ベストアンサー獲得回数59

ポイント52pt

include_pathがphpinfo()では「.;D:\xampp\php\PEAR」となっていたものが

Testでは「.;D:\xampp\htdocs\cake\Test」とPEARへのパスが消えてしまっていることが原因です。

その箇所が特定できるのなら

$path = "D:\xampp\htdocs\cake\Test";
set_include_path(get_include_path().PATH_SEPARATOR.$path);

のように既存のinclude_pathに追加するようにします。(現在は上書きしているのでPEARへのパスが消えた)


include_pathを設定している箇所が特定できないならrequire_once("DB.php");の前に

$path = 'D:\xampp\php\PEAR';
set_include_path(get_include_path().PATH_SEPARATOR.$path);
require_once("DB.php");

として「.;D:\xampp\htdocs\cake\Test」の後ろにPEARへのパスを追加します。


DB.phpは既に開発は止まっておりPHP4が主だったように感じています。PHP4でもクラスは使えますがPHP5とは少し違います。

またPHP4自体も開発が終了します。このような事からDB.phpは使わないほうがいいように思います。

PDOを検討してみてはどうでしょう。

データベースに特定したコードを書くわけではないのでデータベースを変更する場合に修正が少なくなることが期待できます。

id:taroemon

どうやらうまくいったようです。

また、PDOも教えていただいてありがとうございます。

さっそくこちらも勉強してみることにします。

最新のXamppではじめからついてるいるPEARが時代遅れというのは不思議な感じですね。

コメントにひきつづき丁寧なご回答ありがとうございました。


ところで、なんで『Testでは「.;D:\xampp\htdocs\cake\Test」とPEARへのパスが消えてしまっている』んでしょう?

環境PATHの設定の仕方が悪かったのか、Cake PHPがいたずらしてるのか、僕が思い当たるのはそんなところです。

どなたか時間のある時にでもコメントいただければ大変勉強になります。よろしくお願いします。

2010/04/21 02:36:27

その他の回答1件)

id:Bombastus No.1

回答回数409ベストアンサー獲得回数52

ポイント18pt
peardev install DB

は実行しましたか? ご確認ください。


また、PEARはライブラリーとして古く使うべきではないと

どこかで聞いたことがあるのですが、それは本当なのでしょうか?

使うべきでないかどうかは分かりませんが、PHP5ではPEAR::MDB2 を使うことが勧められています。

id:taroemon

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


この処理はしてませんでした。

さっそくコマンドプロンプトを開き、peardev.batのあったD:\xampp\phpに移動し、

peardev install DBを実行したところ、

pear/DB is already installed and is the same as the released version 1.7.13install failed

というメッセージが出ました。質問のエラーは出たままです。

どこが問題なのでしょうか?

2010/04/17 21:41:40
id:tobeoscontinue No.2

回答回数220ベストアンサー獲得回数59ここでベストアンサー

ポイント52pt

include_pathがphpinfo()では「.;D:\xampp\php\PEAR」となっていたものが

Testでは「.;D:\xampp\htdocs\cake\Test」とPEARへのパスが消えてしまっていることが原因です。

その箇所が特定できるのなら

$path = "D:\xampp\htdocs\cake\Test";
set_include_path(get_include_path().PATH_SEPARATOR.$path);

のように既存のinclude_pathに追加するようにします。(現在は上書きしているのでPEARへのパスが消えた)


include_pathを設定している箇所が特定できないならrequire_once("DB.php");の前に

$path = 'D:\xampp\php\PEAR';
set_include_path(get_include_path().PATH_SEPARATOR.$path);
require_once("DB.php");

として「.;D:\xampp\htdocs\cake\Test」の後ろにPEARへのパスを追加します。


DB.phpは既に開発は止まっておりPHP4が主だったように感じています。PHP4でもクラスは使えますがPHP5とは少し違います。

またPHP4自体も開発が終了します。このような事からDB.phpは使わないほうがいいように思います。

PDOを検討してみてはどうでしょう。

データベースに特定したコードを書くわけではないのでデータベースを変更する場合に修正が少なくなることが期待できます。

id:taroemon

どうやらうまくいったようです。

また、PDOも教えていただいてありがとうございます。

さっそくこちらも勉強してみることにします。

最新のXamppではじめからついてるいるPEARが時代遅れというのは不思議な感じですね。

コメントにひきつづき丁寧なご回答ありがとうございました。


ところで、なんで『Testでは「.;D:\xampp\htdocs\cake\Test」とPEARへのパスが消えてしまっている』んでしょう?

環境PATHの設定の仕方が悪かったのか、Cake PHPがいたずらしてるのか、僕が思い当たるのはそんなところです。

どなたか時間のある時にでもコメントいただければ大変勉強になります。よろしくお願いします。

2010/04/21 02:36:27
  • id:tobeoscontinue
    PEAR.phpファイルが見つからないというエラーなので
    D:\xampp\php\PEAR\PEAR.phpが無いかどうか確認してみて下さい。

    ただインストール時には有るはずなので削除しないかぎり有るはずなのですが。
    peardev install DBでDB.phpもここD:\xampp\php\PEARに有るはずです。

    考えられるとすれば実行時にinclude_pathが変更されている可能性です。
    確認のためrequire_once("DB.php");の前にecho get_include_path();
    を追加してinclude_pathを確認してみて下さい。
  • id:taroemon
    コメントありがとうございます。
    悩んでるので非常に助かります。

    echo get_include_path();
    require_once("DB.php");
    「.;D:\xampp\htdocs\cake\Test」と表示されました。
    echo get_include_path();だけで実行しても同様の結果でした。

    どうしたら良いのでしょうか?

    他に悩んでる方の助けになる可能性があるかもしれませんので、
    もしご面倒でなければ回答欄にご回答ください。

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

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

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

回答リクエストを送信したユーザーはいません