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)
确实占用了太多服务器资源,这个上次我也试过,后来也删了
Posted by lihuawei | Dec 26, 2006 9:34 PM
ccode这个插件蛮好用的,可以试试:
http://alogblog.com/movabletype/plugins/ccode_and_tcode_for_blocking_commenttrackback_spam_for_mt_32/
另外,你站上的typkkey似乎不能用了
Posted by georgexsh | Apr 24, 2008 9:19 PM