編集メニュー > 新規作成 編集 コピー 名前の変更 凍結 アップロード 添付ファイル一覧 バックアップ

NEBULAページへの道

NEBULAのメモ?ページについて考え中。求める機能は

  1. シンプルisベスト
  2. テキストのメモを複数ユーザーが書き込める。wikiのような複雑で編集しづらいのは嫌。(初めての人には少し敷居が高く、フォーマットを汚される恐れあり)
  3. 絵を貼り付けられる(psを変換して貼り付けれるといいね。)
  4. 後からある日付の記述の部分につけ足せる。
  5. メモはテキストで保存して、ファイル名は2010-1201-1のような日付で分かるようにしたい。Wikiだとどれがどのファイルに対応するかわからないのでそこも不満。
  6. 後からテキストファイル自体を編集できるようにするかどうかは考えもの。間違えて編集して消したくない。(だけど恥ずかしい間違いとかはなおしたいよね。テキストファイルのバージョン管理をすればよいか?2010-1201-1.2のような?)
  7. ファイル置き場として使いたい(せいぜい便利なマクロやHVの設定のテキストとかかな?)
  8. 記述を時系列で整理する。(カレンダー?、タイトル一覧?)
  9. ランサマリー?
  10. パスワード制限

と、こんなところか?この要求を満たすものをCGIでつくろうかなと思います。K田くんのページは1,2,3,4の点ですぐれているが、整理するという点で不満。問題は3,4,5をどうやって共存させるかかね?

実際自分で書いてみると激しく面倒くさい・・・ 世の中に適当なもんないかね?

ファイルロック

複数のひとが編集することを想定すると、同時アクセスによる衝突でデータが消えることがありえる。なのでファイルロックをする必要がある。symlink、flock、テンポラリーファイルを使うなどの方法が在るらしい。symlinkやflockはサーバーによっては使えないことがあるらしいのでテンポラリーファイルを作ることにする。テンポラリーファイルがある時にはファイルの書き込みがロックされるという方法。

ファイルのアップロードの容量制限

容量を制限するためには

use CGI;
use CGI::Carp qw(fatalsToBrowser);
$CGI::POST_MAX = 1024 * 1024;           # 1024 * 1KBytes = 1MBytes.
my $query = CGI->new;
$query->param;
die($query->cgi_error) if ($query->cgi_error);

のように書けばよいらしい。

改行コード

windowsではCR+LF、MACはCR、LinuxはCR。フォームから文字列をとってきたときには改行コードはクライアント側のものになっている。ファイルに保存してあるテキストとフォームからのものを比較するときにはこの改行コードに気を付けないと常に一致しなくなる。具体的には改行コードを

sub linebreak{# convert line break
    my $str = $_[0];
    $str=~s/\x0D\x0A|\x0D|\x0A/\n/g;
    return $str;
}

のようにして変換した。Perlの中では\nはOSによらない。なのでs/\r\n|\r/\n/gとするのは実は正確ではない、とのこと。

psファイルの変換

convertでは空白はそのままだけど、ps2pngだと余計な空白を消してくれる。 これを使おう!

セキュリティの問題

HTMLのタグが使える状態はかなり危険ということを今更学んだので、フォームで入力されたテキストの中のタグを殺す必要がある。テキストの装飾するものは生かすとして、図を貼り付けるために条件を考える必要がある。リンクは許可しない?でもテキストでかけるのだからリンクのタグは殺してもしょうがないかな? 危険なタグは

  • META
  • SCRIPT
  • FORM
  • IMG

そのほか考えないといけないのは

  • テキスト入力でやたらと長い場合
  • URLを/で止めて入力するとディレクトリの一覧が見えてしまう

htaccessの活用

http://xxx.xxx/xxx/xxx/としたときにディレクトリのファイルが見えるのはよくないよね。

Options -Indexes

と書けばOK。(ハイフンはマイナスの意味)