人気ブログランキング | 話題のタグを見る

PHP開発日記

tomo板にも書いたけど、何しろこのPHP。何か適当に「こんな感じ!?」って書いてみたら動いちゃうのが素晴らしい。何となくVB6のあの適当ぶりを思い出す。かと思えば、割とOO的なコードも許すし、当然継承もできるわけだから高性能。ちと中途半端さもあるが、充分以上に実用可能だねこれ。

現在、投稿用掲示板に特化したCGI作成中。tomo板はネタスレやる分にはいいけど、投稿板としてはやはり参照がダルい。そこで特化版のCGIに移行しようという寸法。

…というわけで設計と製造を始めてるわけだが…

以下は設計中のメモから拾った留意点。


DBがXREAだと5Mしか使えないらしいので、ログをテーブル保存するわけにはいかない。…ってことを対応しようと思うと結構設計に制約ができてきて面白く無い。結局モデルを六個くらい作れば回せそう…ってことになった。

板の設定情報を保存するconfig用テーブル。<これファイル管理すると面倒なのだ。
SSのジャンルごとに大項目として画面わけたいから、ジャンルメタデータテーブル。
作品・またはスレッドのメタデータテーブル。
ログ一件ごとのメタデータテーブル。
ユーザ管理情報テーブル。<投稿用のスレッドはスレ主以外書き込みできなくする為
その他まぁ処理用テーブルは幾つか作ることになるぽ。SQLはソート下手に自分でロジック組むより速いし。とりあえず必須のテーブルだけちゃんとモデリングした。


知り合いの投稿掲示板で使ってるPHPでは、何かテーブル山のように使ってて、容量既に3MBとかいってた。投稿掲示板としては残り2MBでログを…というのは正直厳しい。スレ四本分しかない計算だもんね。圧縮して保持すると、今度は圧縮解凍の処理コストが重すぎる。だからDBで管理するものは各種画面のメタ的な情報のみとし、ログをテキストで持つ方式に設計することにした。スレッド一つアクセスする為にファイルを沢山オープンすることになるけど、試してみた感じ超高速だったからマトモなPCスペックなら問題なさそうだった。

基本指針として、出力系よりも管理画面の充実を優先することにする。これは他の色んな無料公開CGIに共通して、何か使いづらい&機能足りないと思うことが多いから。もうカナリの部分まで後から弄れるようにしたい。スレッド・ログの削除機能とかは当然つけるし、アクセス解析機能とか参照回数とか、後環境変数から得られる情報は全部分析用に保持していくような仕組みを考える。特にアクセスログを残すのは大事。荒らしから身を守るほうが、荒らすことよりもずっと難しいから。

アクセスログ完備すれば.htaccessを利用したアクセス制限機能(要するに荒らしはホストごとBANしちゃう)も運用し易くなるし、どちらかと言えばdeny from allで全弾きしといて、特定優良ホスト(プロバイダ直か、またはアクセスログ要求したら出してくれるトコ)のみ通すような仕組みが望ましいなぁ。書き込みに認証を儲けるつもりだけど、ユーザ登録に制限はつけたくないので結局地道なホスト収集が掲示板自衛のキモになる。 ・・・と、思う。まぁ、アクセスログ収集しとけば許可すべきホストのリストはすぐに出来上がるだろう。これでほぼ串対策は完璧。

ただし正規プロバイダで、串必須なタイプのものがある。CATVなどの中味がLANなネットワークだ。この串対策は環境変数からとってきた値で判定して、一つでも串に該当するものがあれば書き込みエラーが出るようにすりゃいいかと考えている。CATVユーザの切捨てとなるが、特定ユーザはノーチェックで通すというような設定項目を設けておけば、個別で対応できるはず。例えばユーザIDがtomotanで、パスワードが1234って奴が書き込みしようとした場合は串チェックはスルーする…というロジック。あぁ、管理画面の項目が山のようだ。実際のとこは、こう言う管理コストは削減したいんだが…荒らし対策って難しい。

生IPで荒らす度胸があるならソレはもう仕方無い。敬意を表してログをプロバイダと警察にメールするってことで。

と、言う所まで設計して、設計に飽きた。とりあえずDB共通ルーチンを作成。実際に動かしてみたくて、管理画面を作ってみる。おぉ、快速! プロセス一個一個立ち上がってるperlとは大違いだ。PHPってセション管理持ってるし、実はスレッド動作なんだろうか? よくわからん。

ユーザ管理機能を実装する。
・ユーザ一覧参照
・ユーザ更新
・ユーザ登録
・ユーザ削除
上記の4機能実装してみた。上手く動く! DBアクセスは心配するほどのボトルネックは無く、むしろ予想外なほど軽い。更新系もゴリゴリ動く。最大で同時に10回UPDATE文のコールが発生する作りなんだが(だって一件一件更新とかダルいしな。せめて画面に出た奴は同時に弄れないと…) うーん、軽い。10UPDATEなんか瞬時に終わる。負荷どれくらい耐えるかわからんけど、常識的に考えてもPOSTがそんな無茶苦茶発生するはずがない。2chじゃないんだし。つーかmySQLなめとった。使いやすいRDBじゃん。

管理画面のデザインはCSSでガッチリ作った。脱tableタグと言うことで。本番の掲示板機能も同じように作ろう。
CSSって便利だなぁ。後でどうとでも弄れるもんね。これも編集できるような機能つけよう。
・・・どんどん設計が膨れていくなぁww

と、言う所まで進んだ。次はジャンル管理機能とスレッド管理機能とログ管理機能だな。これらは基本似たよーなもんだから一個型作っちゃえば全部それを継承したクラスと言う形で表現できるはず。違うとこだけオーバライド。うーんOO的! インタフェースが無いのが残念だが、まぁ困るほどのモンでもない。

 つか徹夜しちったよ。寝るぽ!
by tomo_otonasi | 2005-02-27 07:24 | PHP/CGI関連


<< 死の行進の解決はまだまだ不可能... >>