まず、そのままのコードだと PHP 5.3 以降でしか動きません(無名関数を使っているので)。
てか無名関数が最近導入されたってどういうことなの・・・。
Download AntiSpam.php
PHP 5.3以上でなくとも動くようにするには(PHP 5 以上)、"exe"メソッドを以下のように修正。
public function exe ($exec) { return is_file($exec) ? $exec : $this->find(); }
上記の方法だとHTMLエンティティ化はされません。ですが、対応版のコードは書く気力も無いし書く気もありません。
Version 1.1.0より可変関数によってエンティティ化されるため、そのままでもPHP5以降なら動きます。
そしてAntiSpam.phpの使い方。まず、データファイル(AntiSpam.cgi)を用意。
次に、以下のコードを書いた記録実行用ファイル(AntiSpamExe.php)を用意。
require('AntiSpam.php'); $antispam = new AntiSpam('AntiSpam.cgi'); $antispam->set();
次にご利用中のPHP掲示板の投稿フォーム出力スクリプトに以下を追加。
require('AntiSpam.php'); $antispam = new AntiSpam('AntiSpam.cgi'); echo '<img src="'.$antispam->exe('AntiSpamExe.php').'" width="0" height="0" alt="">';
最後に、ご利用中のPHP掲示板の投稿受理処理の前に以下を追加。
require('AntiSpam.php'); $antispam = new AntiSpam('AntiSpam.cgi'); $antispam->is() && exit(); // exitは別のものに置き換えてよし。isメソッドは場合によって戻り値が変わる。
- データファイルにIPアドレスが存在しない:1
- 最終記録時刻と現在時刻の差がminimum以下:2
- 最終記録時間と現在時刻の差がmaximum以上:3
- 連続チェック回数がcontinuance以上:4
- その他(正常):0
是非使ってみてください。これを実装してしまえば今のところ99%以上スパムをブロックできます。
それにしてもPHPは遅い。クラス化したから更に遅いし、モジュール版で動かしたPHPでもPerl/CGIには速度で勝てないな。。。
0 件のコメント:
コメントを投稿