2006/06/18(日)ファイルのアップロード

ファイルのアップロードプラグインを更新.アップロード先のフォルダの指定が出来るようになりました.あと,最近アップロードしたファイルへの登録もするようにしました.

更新ファイル\[http://bigslope.dyndns.org/album3.1/common.h:common.h]\[http://bigslope.dyndns.org/album3.1/common.cpp:common.cpp]\[http://bigslope.dyndns.org/album3.1/inifile.h:inifile.h]\[http://bigslope.dyndns.org/album3.1/plugin/upload.cpp:upload.cpp]

多分これだけだと思うけど,不安なので,album3.1.tar.gz\こっちには,全部入ってる...はず

ファイルのアップロード upload.cpp

アップロード先のフォルダの優先順位は,以下のとおりです.

  1. 環境変数指定されたフォルダ env["folder"]
  2. フォームで指定されたフォルダ form["folder"]
  3. 現在のパスから決まるフォルダ env["gallery"]

ユーザ名は自動で付加されるので,ユーザ毎のホームディレクトリからの相対パスを指定してください.

2006/06/18(日)文字列クラス

sstring.h{message}に+=するのがいい加減に面倒になったので,<<を追加.inlineで追加してあるので,ヘッダファイルだけ置き換えればOkです...多分...

これで,

CSString str, str2 = "def";
str  = "abc";
str += str2;
str += "ghi";

みたいなソースが,

CSString str, str2 = "def";
str << "abc" << str2 << "ghi";

のように書くことができます.

念のため.\[http://bigslope.dyndns.org/album3.1/sstring.cpp:sstring.cpp]

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]

2006/05/30(火)プラグインの種類

プラグインは,
  1. 認証
    他のプラグインを利用するための認証プラグイン.
    実際に実装するのは,開発の後期になってからだと思う.
  2. サムネイルの作成
    アップロードされた画像からサムネイルを作成するためのプラグイン.
    サムネイルは,jpeg限定.オフィシャルでは,GIF,JPEG(libexifによる埋め込みサムネイルへの対応),PNGの3種類のプラグインを配布する予定.
  3. アーカイブの展開
    アップロードされたアーカイブを展開するためのプラグイン.
    実際には,ファイルをアップロードするためのプラグインから,逐次解凍するために利用されることになる.zip展開プラグインを配布する予定.
  4. 機能拡張
    アルバム本体とは直接関係ない機能を追加するためのプラグイン.
    フォルダの作成と1行掲示板のプラグインを配布する予定.
  5. ページ拡張
    アルバムの各ページにおいて機能を拡張するためのプラグイン.
    画像のアップロードや,画像の移動といった,画像に関するプラグインがメイン.
  6. 画像表示
    各ページにおいて,サムネイル画像を表示するためのプラグイン.
    このプラグインが無いと,アルバムの各ページにおいて画像を表示することができない,画像のみのサムネイル表示,画像のタイトルなどの情報を含めたリスト表示,一枚ずつ画像を表示するスライドショーの3つのプラグインを配布する予定.
の6種類である.