对Movable Type插件SCode的一点改进

    Fenng的站点关掉了留言的验证码(SCode插件)功能, 居说是因为这个功能占用了太多的资源, 导致了主机的负荷比较高, 不过这样之后不知道他是如何来挡垃圾留言了. 听到这个消息后, 我花了一个小时改了这么一点Perl程序, 因为我不懂Perl. 主要的改进是原来的SCode插件每次访问都要调用图形库函数, 去重新生成验证码的图片, 而我的改进之中是将这些图片保存起来, 这样的话下次访问时就直接从文件中读了, 而不会调用图形库了.

    以我的网站的流量, 是看不到改进的效果的, 因此希望有人去测试一下.

    对SCode.pm文件的改进, 增加了一个函数, 另外限制了生成的验证码的范围为1000-5000, 如下所示:

###########################
#                        #
# Do not modify from here #
#                        #
###########################
sub scode_tmpdir {
    return $tmpdir;
}

if ($code>0 && $code<=$scode_maxtmp)
{
    $scode = 1000 + ($scode % 4000);
    open(OUTFILE,">${tmpdir}${code}");
    print OUTFILE $scode;
    close(OUTFILE);
}

    对mt-scode.cgi的改进, 如果文件不存在就保存到文件, 否则直接从文件中读取, 主要改进如下:


my($MT_DIR);
my($imgfile);
......
# Calculate code
$scode = MT::SCode::scode_get($code);
$imgfile = MT::SCode::scode_tmpdir()."imgcache/temp".$scode.".png";
......
if (-e $imgfile)
{
  binmode STDOUT;
  open IMGOUT, "<".$imgfile;
  print $cgi->header(-type=>'image/png',-cookie=>$cookie);
  print <IMGOUT>;
  close IMGOUT;
}
else
{
  ......
  # Output the image
  binmode STDOUT;
  print $cgi->header(-type=>'image/png');
  print $im->png;
 
  open IMGOUT, ">".$imgfile;
  binmode IMGOUT;
  print $cgi->header(-type=>'image/png',-cookie=>$cookie);
  print IMGOUT $im->png;
  close IMGOUT;
}

    希望我这样的改动是有用的, 有人愿意试试吗?

留言 (2)

确实占用了太多服务器资源,这个上次我也试过,后来也删了

ccode这个插件蛮好用的,可以试试:
http://alogblog.com/movabletype/plugins/ccode_and_tcode_for_blocking_commenttrackback_spam_for_mt_32/

另外,你站上的typkkey似乎不能用了

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • Which is your bag?
  • 哪个是你的包?
  • The bigger one.
  • 大些的那个.
  • The one on your right.
  • 你右边的那个.
  • Are these books all yours?
  • 这些书全是你的吗?
  • Some of them are mine.
  • 一部分是我的.