tomimemo

PearDB

最終更新:

匿名ユーザー

- view
管理者のみ編集可

PEARって

PHP4以降?なら普通に付属してくる、いろんなものの作成を楽にしてくれるクラス群?
日本語マニュアルhttp://pear.php.net/manual/ja/index.php

PEARインストール

windowsの場合、PHPインストールディレクトリ以下にあるgo-pear.batを叩く。DOS窓が開く。全部エンターキーもしくはYes。(設定項目7のphpパスだけ何故か空だったので、ここだけ設定)PHPインストールフォルダ以下にPEAR_ENV.regができるのでそれをダブルクリック。終了。
Linuxの場合は、PHPをインストールした時点でPEARが使えるようになっているはず?

PEAR DBインストールと動作確認

以下コマンド入力してするとネットワークインストールが開始される。
pear install DB
ネットワークインストールできない場合は、http://pear.php.net/get/DB-1.7.6.tgz をダウンロードして適当なディレクトリに保存後、以下コマンド。
pear install 保存先ディレクトリ名の絶対パス/DB-1.7.6.tgz
php.iniのinclude_pathの部分にpearへのパスが通っているか確認。通ってなければパスを通す。
# windowsの場合
include_path=".;d:/php/pear"
# linuxの場合
include_path=".:/usr/local/lib/php/pear"
apache再起動して完了。

以下ソースを書いてmysqlに接続。テーブルの内容が表示されたのでOK。
<?php
  require_once("DB.php");
  $sql      = "select * from table";

  //mySQL接続
  $config = "mysql://username:password@hostname/dbname";
  $db = DB :: connect($config, true);
  $db->setFetchMode(DB_FETCHMODE_ASSOC);
  $result = $db->query($sql);
  while( $rows = $result->fetchRow() )
  {
    echo nl2br( print_r( $rows, true ));
  }
?>

前日にいれたSmartyを試したら、「パスが通ってないよ」系のエラーが表示された。
php.iniを確認してみたら、Smartyへのパスがコメントアウトされていた。
インストール時のgo-pear.batを叩いた影響。

で、コメントアウトを外したら、今度はSmartyが動かなかったり、DB.phpが読み込まれなかったり...
include_pathが複数行に渡ってある場合はアウトなのか?

とりあえず、include_path を一行にまとめたところOKとなった。
×
include_path=".;D:\php\pear;D:\php\includes"
include_path=".;D:\php\lib\Smarty"

○(一行にまとめた)
include_path=".;D:\php\pear;D:\php\includes;D:\php\lib\Smarty"

PEARDBのExceptionラッパー

神のカキコミを保管(爽)
小山です。

最近になってようやく PHP5 で実用コードを書き始めています。

PHP5 で PEAR を利用する際にはエラー処理をどのようにするのかが悩まし
いところだと思います。PHP5 の例外を全面に使いたいところですが、PEAR パッ
ケージのクラスでは当然例外を投げてはくれずに PEAR_Error オブジェクトを
返します。この辺をなるべく簡単な記述で処理したいと思い、私は以下のクラ
スを作りました。

======================================================================
<?php

require_once 'PEAR.php';
require_once 'PEAR/Exception.php';

class Hoge_ExceptionWrapper {

   static public function init() {
       static $initialized = false;
       if (!$initialized) {
           PEAR::setErrorHandling(PEAR_ERROR_CALLBACK,
                                  array('Hoge_ExceptionWrapper',
                                        'handleError'));
           $initialized = true;
       }
   }

   static public function handleError($err) {
       throw self::factory($err);
   }

   static public function wrap($obj) {
       if (is_a($obj, 'PEAR')) {
           $obj->setErrorHandling(PEAR_ERROR_CALLBACK,
                                  array('Hoge_ExceptionWrapper',
                                        'handleError'));
       }
   }

   static public function factory($err) {
       // default exception class
       $class = 'PEAR_Exception';

       return new $class($err->getMessage(), $err->getCode());
   }
}

?>
======================================================================

使用方法は以下の通りです。

最初に

  Hoge_ExceptionWrapper::init();

を呼んでおくと、デフォルトの $mode で PEAR_Error を返しているクラスは、
PEAR のエラーコールバックの中で例外が throw されるようになります。

  $mode を PEAR_ERROR_RETURN に直接指定しているパッケージもあるので、
その場合は従来の PEAR::isError() を用いてエラーチェックを行い、

  if (PEAR::isError($obj)) {
        Hoge_ExceptionWrapper::handleError($obj);
  }

のように例外に変換します。

  throw される例外オブジェクトは factory メソッド内で自由に指定できま
す。この例では常に PEAR_Exception を返すようになっています。

  質問者の想定している回答とは全然違うと思いますが(笑)、この辺の情報が
まとまってるのを見たことがなかったので、ちょっと書いてみました。

-- 
	小山 哲志@ビート・クラフト
	koyama @ beatcraft.com
	koyama @ hoge.org

PEAR Calendarインストール

PEAR DBに習って
pear install Calendar
と入力したが以下エラーが出た。
 Failed to download pear/Calendar within preferred state "stable",
 latest release is version 0.5.3, stability "beta",
 use "channel://pear.php.net/Calendar-0.5.3" to install Cannot initialize 'Calendar',
 invalid or missing package filePackage "Calendar" is not valid
 install failed
仕方が無いので手動でインストール

http://pear.php.net/package/Calendar/download から Calendar-0.5.3.tgz をダウンロード後、適当なディレクトリに移動。以下入力
pear install 格納されてるディレクトリ/Calendar-0.5.3.tgz
人気記事ランキング
目安箱バナー