A_single_file_wiki_wifky2.png

[hack] 物理データ構造

ワークディレクトリ

ワークディレクトリは、スクリプトファイルのフルパスの拡張子を

  • UTF-8 運用の場合は「.d」、
  • EUC-JP 運用の場合は「.dat

に変えたもとのなる。 ワークディレクトリは CGI にて、初回実行の際、自動作成される。

コード量削減の為、スクリプトはワークディレクトリへ chdir して動作する。

スクリプトのパス UTF-8運用 EUC-JP運用
/foo/bar/wifky.pl /foo/bar/wifky.d/ /foo/bar/wifky.dat/
/var/www/cgi-bin/index.cgi /var/www/cgi-bin/index.d/ /var/www/cgi-bin/index.dat/

管理ファイル一覧

通称 設定者 内容
ページファイル CGI生成 ユーザがタイプしたページ内容をそのまま保持するテキスト
添付ファイル CGI生成 添付ファイル。ファイル名以外無加工
タグファイル CGI生成 添付ファイルの一種の形で作成される
設定ファイル CGI生成 1個のみ。変数:値形式で、設定内容を保持
プラグイン FTP設置 ユーザによりワークディレクトリ(後述)内に設置
本体スクリプト FTP設置 ユーザにより、任意の CGI 実行可能ディレクトリに配置される。

本体スクリプトを除き、これら全て、ワークディレクトリに配置する。 また、これら以外のファイルは、原則作らない。

プラグインで利用するファイルも、ページファイル、あるいは添付ファイルの形で作成し、 ブラウザ経由でユーザに変更・削除ができることを保証する。

ページファイル

ファイル名形式:hhhhhhh

hhhhhhh
16進 ASCII 化したページ名。perl だと unpack('h*','ページ名) で生成する。

ユーザが入力した通りの内容を無加工でファイル化したもの。 加工は原則表示時に行う。

凍結

凍結は、本文ファイルの書き込み可能属性をフラグとしている。これが

  • 0666 の時(-w)は、非凍結状態
  • 0444 の時(! -w)は、凍結状態

とみなされる。

添付ファイル

ファイル名形式:hhhhhhh__aaaaaa

hhhhhhh
16進 ASCII 化したページ名。perl だと unpack('h*',ページ名) で生成する。
aaaaaaa
16進 ASCII 化した添付ファイル名。perl だと unpack('h*',ファイル名) で生成する。

コメントファイル(添付ファイルの一形態)

comment.0 という名前の添付ファイル扱いとなる。 ((comment)) に引数がある場合、「0」部分が引数に置き換わる。 中身は次の行の繰り返し。

 YYYY/MM/DD hh:mm:ss(TAB)名前(TAB)コメント

コメントの文字列はファイル上で次のようにエンコードされる。

入力文字 ファイル上
改行コード(LF) ^n
復帰コード(CR) ^r
タブコード ^t
キャレット(^) ^y
<,>,& そのまま

エンコードは &::yen(…) , デコードは &::deyen(…) で行う。

タグ

ファイル名形式:hhhhhhh__00aaaaaa

hhhhhhh
16進 ASCII 化したページ名。perl だと unpack('h*',ページ名) で生成する。
aaaaaaa
16進 ASCII 化したタグ。perl だと unpack('h*',タグ名) で生成する。

ファイル自体は 0 バイト

設定ファイル

固定で一つのみ存在する 。 1.0.1 までのファイル名は 「ワークディレクトリ/__0716373777f62746」 (語源は '__' . unpack('h*','password') の結果)。 1.0.2 以降は「ワークディレクトリ/index.cgi」に変わっている。

(ファイルの内容)
= { (変数名) + (TABコード) + (値) + (改行コード) }の繰返し + EOF
(変数名)
= { (非空白文字) } の繰返し
(値)
≪二値の場合≫ 未設定「0」「NG」が偽、それ以外は真
≪テキストの場合≫ 設定テキストそのまま。ただし、 キャレット(^) ⇒ ^y , 改行コード(LF) ⇒ ^n , 復帰コード(CR) ⇒ ^r , タブコード(TAB) ⇒ ^t と置換されている。
  • 本ファイルのみ、パーミッション(セキュリティー)の配慮が必要
  • 定義行の順は何でもよし。
  • 設定未定義の解釈は、設定内容ごとに解釈
  • 変数名には、名前空間は特に設けていない。
  • 利用している変数としては下記がある(全てではない)
変数名
crypt テキスト crypt(〜,'wk') で暗号化したパスワード
sitename テキスト サイト名(EUC)
locallink 二値 file:// のリンクを有効にするか
CSS テキスト CSS のページ名
sectionmark テキスト 標題先頭のマーク
target テキスト 外部リンクへの target 属性

0.53 までの旧形式

  • 1行目 ⇒ 符号化されたパスワード
  • 2行目 ⇒ サイト名

0.99 以降ではサポートしていません。

プラグインファイル

  • 拡張子 .pl or .plg
  • プラグインファイルの有効・無効は管理しない。 ワークディレクトリに置くだけで、即、有効になる。

スクリプトファイル本体

  • どんな名前にユーザが rename してもよい。
    • $0 を元にスクリプトファイル名・ワークディレクトリ名を生成させる。
    • スクリプトファイル名を直書きするのは、署名欄のみ

|

Designed for @nifty.