2006/06/15(木)プラグインとかの修正

アップロードプラグイン
ファイルのアップロードに成功した場合,アップロードしたファイルのハッシュを環境変数env["upload"]に保存するようにしました.

フォルダ作成プラグイン
フォルダ作成時,dir.txtが無い場合,作成するように修正しました.

ハッシュテーブルクラス ヘッダ\[http://bigslope.dyndns.org/album3.1s/hashtable.cpp:ハッシュテーブルクラス ソース]
IsExistメソッドの仕様を変更しました.
int CHashTable::IsExist(const char *name, const char *value, int flag)\ハッシュテーブル中のnameエントリーに,valueがあるかテストします.
flagが非0の場合,大文字,小文字区別します.0の場合(省略時)は区別されません.

おまけ{int CHashTable::IsExist(const char *name, const char *value, int (*func)(const char *, const char *) = strcasecmp))}\ハッシュテーブル中のnameエントリーに,valueがあるかテストします.
3番目の引数で,比較関数を指定することができます.

2006/06/15(木)シンボリックリンクの利用

シンボリックリンクに対応したバージョンを検討中。シンボリックリンクを使うと、サムネイルの表示等に余計なcgiを通さずにすみます。ただし、サムネイルの存在チェック等をcgi側で行うことができないため、mod_rewrite必須です。

mod_rewrite使える環境にないので、テストできません。

現在検討中の案

ユーザ: serika
ホームディレクトリ: home (config.ini)
ハッシュ用フォルダ: .hashdb (config.ini)
サムネイル用フォルダ: .thumb (config.ini)
ハッシュ内画像キーワード: image (固定)
ハッシュ内サムネイルキーワード: thumb (固定)
ギャラリー: test
画像: test.jpg
画像のハッシュ: abcdefg
サムネイル作成プログラム: thumbnail (固定)
サムネイルの拡張子: .jpg (固定)
サムネイル作成プログラムは、サムネイル作成後、実際のサムネイルにリダイレクトする

アルバムの出力する可能性のあるパス
画像本体: album/home/serika/test/test.jpg
サムネイル: album/home/serika/test/.thumb/test.jpg.jpg
 このとき、サムネイルが無い場合は、次のパスへ変換が必要
 album/thumbnail/serika/test/test.jpg
画像本体(ハッシュ利用): album/home/serika/.hashdb/image/abcdefg
サムネイル(ハッシュ利用): album/home/serika/.hashdb/thumb/abcdefg
 このとき、シンボリックリンクが無い場合は、次のパスへの変換が必要
 album/thumbnail/serika/.thumb/abcdefg

最終的には、makeファイルでシンボリックリンクを使うか、切り替えられるようにしたいところ。両方同時に利用することは考えていません。

2006/06/13(火)ハッシュによるファイルの検索

ハッシュを使うことで,ファイルの移動にも対応できるようになったが,その分,余計なファイルのロードや,利用するたびにデータの問い合わせが発生することになってしまった.

今後の方針としては,

  1. ハッシュデータベースをやめ,ハッシュで画像へのシンボリックリンクを作成する
  2. 負荷がかかっても気にしない \まあ,ある程度のキャッシュはすることになると思うが...

の2択である

確かに,シンボリックリンクで対処した方が,余計なcgiを通さずに済むが,一部の存在しないファイルに対しても,シンボリックリンクを張ることになってしまう*1.そもそも,ハッシュによる検索は,ファイルのアップロード時に同じファイルがあるか,チェックするための物の副産物であり,新着画像のような,ほんの一部のページでしか使われることは無い.

余計なcgiを通さずに済むメリットと,画像と同じ数のリンクを張らなければならないデメリット.価値としてはどちらが上か悩むところである.

*1 : サムネイルは,アクセスがあった時点で作成するため,サムネイルが無い状態で,サムネイルへのリンクを張ることになってしまう

2006/06/11(日)プラグイン::一般

プラグインは,最低限以下に上げる関数を実装しなければならない.

  • int IsEnable(void);
    プラグイン自体が有効か示す関数.
    プラグインが無効ならば 0 ,有効ならば 0以外の値 を返すこと
  • int Type(void);
    プラグインのサポートする種類を返す関数.
    返値は,CPlugin内において定義されているENUM値の論理和である必要がある.
         ENUM値サポートする機能
    AUTH 認証
    IF サムネイル作成
    AX アーカイブ展開
    EXT 機能拡張
    PEXT ページ拡張
    PV 画像表示
    例えば,機能拡張,ページ拡張の2つの機能を持つプラグインの場合,

    int Type(void){
        return CPlugin::EXT | CPlugin::PEXT;
    }
    

    となる

  • const char *Info(void);
    プラグインの説明文.
  • const char *Name(void);
    プラグインの名前.

2006/06/11(日)認証

テスト段階ではあるが,実装してみた.現在,ファイルのアップロード,フォルダの作成の2つに制限をかけてある.

サンプルでは,javascriptでcookieを出すようにしているため,両方とも有効にしておく必要がある.

ID, PWは同じものを入れればなんでも通るので適当にためして欲しい.\[http://bigslope.dyndns.org/album3.1/index/serika:せりかのアルバム C版 v3.1.0]