MARCO's FREE MEMO

携帯フォトや備忘録などをちょこっと…

迷惑カキコ拒否機能付き掲示板

2006年04月01日 12時57分12秒 | perl
1~2ヶ月前からサイトのBBSに変なカキコがされるようになった。
仕事が忙しいこともあって「気づいたら削除」の消極的対応をしていたが面倒になってきたので、perlを修正した。

機能は↓こんな感じ

・拒否したいホストアドレスを外部ファイルに登録する
(カキコを削除する時に特定のパスワードを使うと拒否リストに登録される)
・拒否リストに登録されたホストアドレスからの接続の時は書込ボタンを表示しない

接続のたびにアドレスが変わるプロバイダも多いのでホストアドレスの先頭8文字くらいで比較するとよさそう。悪意のない人が偶然アドレスが一致してしまうこともあるかもしれないが、確率としてはかなり低いだろう。

いままでどおり削除する時にパスワードだけ変えるだけだから手間がかからないし、拒否リストに悪質なアドレスが残るのでとっても便利。
効果が出てきてる気がするけど、もう少し様子をみてみよう。


今日は絶好のお花見日和だが、なぜか出勤してたりする(T-T)

迷惑カキコ防止

2005年09月10日 09時34分29秒 | perl
結構困っている人が多いようなのでperlである程度防御する掲示板を作ろうかな、と思っている。

仕様としては
1、文字数の制限
 一度に大量の入力をされるのを拒否
2、短時間連続投稿禁止
 あらし対策
3、IPアドレスの自動記録
 禁止行為を一定回数以上行ったIPアドレスを記録して入力を不可とする

無意味な営業カキコを何とか阻止するアイデアはないものだろうか・・・。


桁数の取得

2005年07月13日 09時08分28秒 | perl
変数の値が何桁なのかを取得する方法

$w=int(log($num)/log(10));

$numは10の$w乗として計算される
例えば$num=100なら$w=2、$num=10000なら$w=4

グラフの範囲を指定するときに最大値を$num1、最小値を$num2とすると
$w=int(log($num1)/log(10));
$max=(int($num1/(10**$w))+1)*(10**$w);
$w=int(log($num2)/log(10));
$min=int($num2/(10**$w))*(10**$w);
グラフの有効範囲は$minから$maxまででよい

ちなみに「**$w」はべき乗

対数logなんて日常生活ではほとんど使わないなあ
プログラミングでもグラフ関連以外では使ったことない


SQLサーバにアクセス

2005年07月05日 14時48分04秒 | perl
perlでSQLサーバにアクセスできてしまった。
ちょっと感動・・・

use OLE;
$conn=CreateObject OLE "ADODB.Connection";
$conn->open("dsn=pubs;uid=su;PWD=**");
$rs=$conn->Execute('SELECT * FROM jobs;');
for(;!$rs->EOF();$rs->MoveNext){
$id=$rs->Fields('job_id')->Value;
$job=$rs->Fields('job_desc')->Value;
print "$id:$job\n";
}
$rs->Close();
$conn->Close();

やればできるもんだなあ(感涙)
WEBサーバ上にAccessのmdbを置いてアクセスできるのかなあ?
できたら便利になるけどなあ。
今度試してみようっと♪


アクセスランキング

2005年06月14日 12時03分49秒 | perl
自分のサイトのアクセスランキングのプログラムを自分のサイトで使ってみた。
「CGIサンプル」のページでは昨年からずっとこれを使っていたのだが、「Javaスクリプト」のページはこれまで別のcgiを使っていたのだ。
昨日「さーて設置しよう」と思って設定方法を確認しようとソースの中身を確認したら、なんとひとつのプログラムで複数のページのカウントや表示ができるようになっていた。
「おー便利!よくできてるじゃん♪」とよろこんだが、よく考えると自分の作ったプログラムだ。いわゆる「自画自賛」(恥)
でもこんな風に前に作ったプログラムを後で見ると全然覚えていないことに呆れると同時に、新鮮な感動を得ることもあるから面白い。
しばらくこれまでのプログラムの点検作業を続ける予定・・・

正規表現メモ(続き)

2005年06月03日 12時27分13秒 | perl
文字を置き換えるのにこんな使い方ができる

Visual Basicの表現をJavaの表現に変える時の例
~s/For (.+)=(.+) To (.+)/for($1=$2;$i<=$3;$1++){/ig;

置き換え前で指定した部分を順番に$1、$2・・・という風に書けばちゃんと変換してくれる

まだうまくできないところもあるけど、結構面白い。
もうちょっと遊んで勉強してみようっと♪


正規表現メモ

2005年05月25日 12時14分08秒 | perl
perlでは結構必要なのにあまり知らない正規表現(笑)←笑っていいのか

■文字列の置換書式
s/置き換え前の文字列/置き換え後の文字列/指定

「.」は任意の一文字
「*」は直前の文字が0回以上ある場合にマッチ
「$&」は置き換え前の文字列

$_=~ s/<.*>/$&\n/g;
とすると'<'と'>'に囲まれた文字が対象となり、対象文字列の後に「\n」が付加される。

正規表現を駆使するとそれだけでプログラミングっぽい処理ができそうなんだけどなあ。
unixでエディタを使う人は必須かな?

おとといも昨日もすごい雨が降った。今日は降らないでください!

複数のパラメータの取得

2005年05月07日 16時54分03秒 | perl
?の後に記述した複数のパラメータを取得する方法

$buf=$ENV{'QUERY_STRING'};
@pairs=split(/&/,$buf);
foreach $pair (@pairs) {
($name,$value)=split(/=/,$pair);
$value=~ tr/+/ /;
$value=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$PARAM{$name}=$value;
}

例えば「test.cgi?YY=2005&MM=5&DD=7」とした場合にプログラムでは
PARAM{"YY"}=2005;
PARAM{"MM"}=5;
PARAM{"DD"}=7;
という連想配列に値が格納されることになる。

パラメータ渡しでWEBアプリを作る場合には必須だな。

今日はDVD「めだか」を借りてきた。実は第2話だけ見逃していたのだった。やれやれやっと見れた(笑)

ヘボン式

2005年04月20日 09時09分05秒 | perl
ローマ字をヘボン式に変換する関数

#####ヘボン式表記へ
sub hebon{
$roma=~ s/si/shi/;
$roma=~ s/ti/chi/;
$roma=~ s/tu/tsu/;
$roma=~ s/hu/fu/;
$roma=~ s/zi/ji/;
$roma=~ s/di/ji/;
$roma=~ s/du/zu/;
$roma=~ s/sya/sha/;
$roma=~ s/syu/shu/;
$roma=~ s/syo/sho/;
$roma=~ s/zya/ja/;
$roma=~ s/zyu/ju/;
$roma=~ s/zyo/jo/;
$roma=~ s/tya/cha/;
$roma=~ s/tyu/chu/;
$roma=~ s/tyo/cho/;
}
正規表現で置換してるだけだったりして