ここ1~2ヶ月ほど、温泉とオーストラリアとスイスで共通に使っている掲示板への宣伝書き込みがうざすぎる。
まめに消しているつもりでも、旅行中とかちょっと目を離した隙に似たようなのがいくつも書かれる。
もちろん「マナーは守ってね。宣伝は禁止ね」なんて改めて書く気はない。だってそういうのを真面目に読むような人はそもそもマナー違反の書き込みなんてしないし、宣伝書き込みをする奴らはそんなのいちいち読んでいるわけないからだ(しかも掲示板自動投稿ソフトなんて使っているから、ロボット相手に法を説くようなもの)。
対策としては・・・禁止ワード設定ぐらいしか思いつかない。
つまり、禁止ワードをコメント本文や名前の欄に書くとエラーが出るようにする。相手の宣伝アドレスを禁止ワードにしてしまえば、最初の書き込みは防げなくても二度目からはシャットアウト。
ところが、私が使っている掲示板、レッツPHP!のp++BBSには禁止ワード設定の機能が無い。
・・・ここで諦めてはいけない。
スクリプトと名の付くものが苦手でも、ここはなんとか改造してp++BBSで禁止ワードを弾くのだ。
というわけで、やってみた。
幸い同じ作者様のP-BBSという掲示板には禁止ワード設定ができるようになっているので、こちらを参考にさせていただく。
以下、自分のメモであるとともにもし同じ悩みの人がいたらどうぞ活用下さい。
1.スクリプト本体のpppbbs.phpを開く
2.Aの記述をBの下に挿入する
A この記述をコピーして挿入する
// 使用禁止ワード
$no_word[] = '死ね';
$no_word[] = '馬鹿';
B スクリプトから以下の記述を探してその下にAの記述を挿入(別にここでなきゃいかんというわけじゃないが)
/* 過去ログ一つに書き込む行数 */
define("PAST_LINE", 50);
3.Cの記述をDの下に挿入する
C この記述をコピーして挿入する
// 禁止ワード
if (is_array($no_word)) {
foreach ($no_word as $fuck) {
if (preg_match("/$fuck/", $com)) error("使用できない言葉が含まれています!");
if (preg_match("/$fuck/", $sub)) error("使用できない言葉が含まれています!");
if (preg_match("/$fuck/", $name)) error("使用できない言葉が含まれています!");
}
}
D スクリプトから以下の記述を探してその下にCの記述を挿入(別にここでなきゃいかんというわけじゃないが)
if(strlen($name) > MAXNAME) error("名前が長すぎますっ!");
if(strlen($sub) > MAXSUB) error("タイトルが長すぎますっ!");
if(strlen($com) > MAXVALUE) error("本文が長すぎますっ!");
4.書き込み前の処理に関する以下の記述に$no_wordを追加する。
つまり・・・
/* 書き込み前の処理 */
function RegCheck($sub,$name,$email,$url,$color,$pwd,$com,$res){
global $PHP_SELF,$REQUEST_METHOD,$log,$thread;
とあるのを、
/* 書き込み前の処理 */
function RegCheck($sub,$name,$email,$url,$color,$pwd,$com,$res){
global $PHP_SELF,$REQUEST_METHOD,$log,$thread,$no_word;
と書き換える。
以上で、禁止ワード設定ができるはず。
禁止ワードはいくらでも追加できるので、$no_word[] = '馬鹿';のところをコピーして、「馬鹿」の代わりに弾きたいサイトのアドレスとかじゃんじゃん入れてみて下さい。
同様の方法で禁止ホスト設定などもできますが、私は.htaccessを使ってホスト制限やリファラ制限を行っているのでPHPではこちらは必要としませんでした。
そうして禁止ワード措置をして使っている掲示板はこちら→ガーデンテラス掲示板
※2006年11月追記 この方法でもスパム書き込みを防げない場合は、こちらの記事も参考にして下さい。→英文リンクスパム迷惑書き込みと戦う
最近のコメント