2006/06/16(金)フォルダの作成とdir.txtへの登録
common.h\[http://bigslope.dyndns.org/album3.1/common.cpp:common.cpp]
int MakeFolder(const char * const parent, const char * target);{parent}の下にtargetを作成します.
int RegistFolder(const char * const parent, const char * const target, const char * name = NULL); dir.txtのparentで指定されたフォルダに,nameでtargetを追加します.
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(火)ハッシュによるファイルの検索
ハッシュを使うことで,ファイルの移動にも対応できるようになったが,その分,余計なファイルのロードや,利用するたびにデータの問い合わせが発生することになってしまった.
今後の方針としては,
- ハッシュデータベースをやめ,ハッシュで画像へのシンボリックリンクを作成する
- 負荷がかかっても気にしない \まあ,ある程度のキャッシュはすることになると思うが...
の2択である
確かに,シンボリックリンクで対処した方が,余計なcgiを通さずに済むが,一部の存在しないファイルに対しても,シンボリックリンクを張ることになってしまう*1.そもそも,ハッシュによる検索は,ファイルのアップロード時に同じファイルがあるか,チェックするための物の副産物であり,新着画像のような,ほんの一部のページでしか使われることは無い.
余計なcgiを通さずに済むメリットと,画像と同じ数のリンクを張らなければならないデメリット.価値としてはどちらが上か悩むところである.
2006/06/11(日)プラグイン::認証
認証プラグインは,プラグイン汎用関数の他,IsAuthenticated関数を実装しなければならない.
- int IsAuthenticated(void);
現在のユーザが認証済みであるか返す関数.
認証済みであれば,0以外の値 を返し,未認証であれば,0 を返すこと.
2006/06/11(日)プラグイン::一般
プラグインは,最低限以下に上げる関数を実装しなければならない.
- int IsEnable(void);
プラグイン自体が有効か示す関数.
プラグインが無効ならば 0 ,有効ならば 0以外の値 を返すこと - int Type(void);
プラグインのサポートする種類を返す関数.
返値は,CPlugin内において定義されているENUM値の論理和である必要がある.
例えば,機能拡張,ページ拡張の2つの機能を持つプラグインの場合,ENUM値 サポートする機能 AUTH 認証 IF サムネイル作成 AX アーカイブ展開 EXT 機能拡張 PEXT ページ拡張 PV 画像表示
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]