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
アップロード先のフォルダの優先順位は,以下のとおりです.
- 環境変数指定されたフォルダ env["folder"]
- フォームで指定されたフォルダ form["folder"]
- 現在のパスから決まるフォルダ 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/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]
2006/05/30(火)プラグインの種類
- 認証
他のプラグインを利用するための認証プラグイン.
実際に実装するのは,開発の後期になってからだと思う. - サムネイルの作成
アップロードされた画像からサムネイルを作成するためのプラグイン.
サムネイルは,jpeg限定.オフィシャルでは,GIF,JPEG(libexifによる埋め込みサムネイルへの対応),PNGの3種類のプラグインを配布する予定. - アーカイブの展開
アップロードされたアーカイブを展開するためのプラグイン.
実際には,ファイルをアップロードするためのプラグインから,逐次解凍するために利用されることになる.zip展開プラグインを配布する予定. - 機能拡張
アルバム本体とは直接関係ない機能を追加するためのプラグイン.
フォルダの作成と1行掲示板のプラグインを配布する予定. - ページ拡張
アルバムの各ページにおいて機能を拡張するためのプラグイン.
画像のアップロードや,画像の移動といった,画像に関するプラグインがメイン. - 画像表示
各ページにおいて,サムネイル画像を表示するためのプラグイン.
このプラグインが無いと,アルバムの各ページにおいて画像を表示することができない,画像のみのサムネイル表示,画像のタイトルなどの情報を含めたリスト表示,一枚ずつ画像を表示するスライドショーの3つのプラグインを配布する予定.