«前の日記(2008年12月08日) 最新 次の日記(2008年12月10日)» 編集

日々をアレコレ


2008年12月09日

PEAR::Configの個人的使い方まとめ

PEAR::ConfigでINI形式の設定ファイルを扱うクラスを作ってみた。

class IniConfig
{
    const CONFIG_TYPE = "inifile";
    protected $filename = "";
    private $config = NULL;
    private $pear_error = NULL;

    // コンストラクタ
    public function __construct()
    {
        $this->config = new Config();
    }

    // PEAR Error取得
    public funtion get_pear_error()
    {
        return $this->pear_error;
    }

    // ファイル読み込み
    public function readFile()
    {
        if( $this->filename === "" )
        {
            return false;
        }

        $ret = $this->config->parseConfig( $this->filename, IniConfig::CONFIG_TYPE );
        if( PEAR::isError($ret) )
        {
            $pear_error = $ret;
            return false;
        }
        return ture;
    }

    // ファイル書き込み
    public function writeFile()
    {
        if( $this->filename === "" )
        {
            return false;
        }

        $ret = $this->config->writeConfig( $this->filename, IniConfig::CONFIG_TYPE );
        if( PEAR::isError($ret) )
        {
            $pear_error = $ret;
            return false;
        }
        return ture;
    }

    // 値取得
    public function getValue($section, $key, $default = 0)
    {
        $root =& $this->config->getRoot();

        $conf_sec =& $root->getItem("section", $section);
        if(!$conf_sec)
        {
            // セクションがないときはデフォルト値を返す
            return $default;
        }

        $conf_key =& $conf_sec->getItem("directive", $key );
        if(!$conf_key)
        {
            // キーがないときはデフォルト値を返す
            return $default;
        }

        return $conf_key->getContent();
    }

    // 値設定
    public function setValue($section, $key, $value, $save = false)
    {
        $root =& $this->config->getRoot();

        $conf_sec =& $root->getItem("section", $section);
        if(!$conf_sec)
        {
            // セクションがないときは作成
            $conf_sec =& $root->createSection($section);
        }

        $conf_key =& $conf_sec->getItem("directive", $key );
        if(!$conf_key)
        {
            // キーがないときは作成
            $conf_key =& $conf_sec->createDirective($key, $value);
        }
        else
        {
            $conf_key->setContent($value);
        }

       if($save)
       {
           // 保存フラグONなら保存する
           writeFile();
       }
    }
}

INI形式にしたのは、直接ファイルを編集するときにわかりやすいと思ったから。あとは、アプリケーション毎にこのクラスを派生させて、$filenameを設定したクラスを作ってやればOK。

一回転半

プログラミングに集中していたら朝になっていた。ので、そのまま少ない仮眠で夜まで起きてみることに。夜型な生活を普通の生活にリセットできるかな?

XAMPPインストール

これで何度目になるかわからないけど、XAMPPをインストール。ただし、ApacheもMySQLも使わない。目的はPEAR。PDTでコーディングしていて、PEARとかSmartyとかのコード補完ができれば便利だと思って。XAMPPならPEARもインストールされるし、と思ってのことなんだけど、実はPHP5だけインストールしても同じで手間がかかるだけだった。まー、ディスクは余っているんでいいかな?

解決策がわからない

とりあえず、現在のPHP開発環境と現在の問題点まとめ

  • 実行サーバは、coLinuxで動いているDebain。ウェブサーバはApache2、PHPのバージョンは5.2.0(←これが曲者)。できれば、本番のサーバと似た環境(さくらのサーバはFreeBSD)で動かしたいので、Windows上にサーバを動かすのはイヤだ。
  • 開発環境は、Windows上で動くEclipse+PDT。viとかemacsとか操作に不慣れだから、Windows上で開発したい。
  • ファイルのやりとりは、Windows側で共有フォルダを設定して、それをDebian側でsmbmountし、Apache2のディレクティブ設定をしている。
  • 問題は、PEAR::Cacheクラス内で使われるtouch関数がPHP5.3.0以前のバージョンでは、Windowsファイルシステムには対応していない。したがって、ソースファイルと同じフォルダ上にキャッシュディレクトリを作ると動作してくれない。
    1. 解決策1:キャッシュディレクトリだけをDebian上に作成する。ただし、これだと一括してアップロードができない。
    2. 解決策2:ソースをDebian上で作成し、そのディレクトリをSambaで公開する。ただし、これだとバックアップがややこしい。

さて、いかがしたものか。

(追記)ややこしいことをすることにする。

  1. Debianの容量を増やした。
  2. ウェブアプリはDebian上に置く。
  3. ウェブアプリをおいたディレクトリをSambaでWindowsと共有する。
  4. IOデータのSync withを使って、Windows上のフォルダと同期させる。
  5. ソースの編集はWindowsの同期先のフォルダで、実行はDebianの同期元のディレクトリで。
Tags: php colinux
本日のツッコミ(全4件) [ツッコミを入れる]
李徴 (2008年12月10日 00:13)

「サザエさん 卵割り器」という検索ワードがしばらく前からずっと表示されているのがとても気になるのですが。

shaga (2008年12月10日 08:26)

とりあえずこれをご覧ください。<br>ttp://jp.youtube.com/watch?v=7nOzO5f0MyE<br>この話を真面目に考えたことがあるので、検索に引っかかるのだと思います。

李徴 (2008年12月10日 21:00)

ワロタ。いろいろMADが作られてるんでんすね。ttp://jp.youtube.com/watch?v=k-kFE4eyFRk<br>とか。

H (2008年12月11日 06:38)

>「サザエさん 卵割り器」<br>→波平さんは怒るとすぐに「出入り禁止」と言う。何か、人間の小ささや幼稚さを感じるのは私だけ?会社でも業者が少し問題を起こすと嬉々としてそう言うおじさんが多いのですが…。


«前の日記(2008年12月08日) 最新 次の日記(2008年12月10日)» 編集