A-A+

WordPress的验证码插件(扩展)

2008年11月25日 WordPress, 编程开发 暂无评论 阅读 1 次

我的Blog, 时不时就能收到外国人发来的各种垃圾广告...

虽然blog系统有屏蔽垃圾评论的功能, 但是很有局限性...

所以这令我, 很是郁闷
一直就想着要做一个插件, 来防止任何外国人去评论...
(我也没有什么外国朋友, 有的话, 想要交流直接在qq上就好...)
当然, 只有"中文"能办到...

今天搜索, 发现了http://www.dualface.com/blog/?p=194 , 这上面的一个WP插件, 看了下代码, 超简单, 适合我等新手修改...
PS: 此修改未经原作者同意, 在此我深表抱歉...

1. 图片生成.php(UTF-8)

PHP 代码:
< ?php # # ImgCode - 用于评论的图像验证码 # # Copyright (c) 2005 dualface #
# Update By ETiV
#
/**
* 显示验证码
*
* @copyright Copyright (c) 2004 dualface.com
* @author 廖宇雷 <daut@dualface.com>
* @package register
* @version $Id$
*/

//初始化想要输出的字符(英文+数字), 及其长度(一共4个字符, 加上一个中文就足以屏蔽外国人了)
$string = '';
$string_len = 3;

//输出的英文+数字从下面的字符串中取材.
$stuff = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

//计算长度, 要减去1. 因为要用substr.
$stuff_len = strlen($stuff) - 1;

//循环建立起想要输出的非中文内容
for ($i = 0; $i < $string_len; $i++) { $string .= substr($stuff, rand(0, $stuff_len), 1); } //这里就要开始建立汉字内容了, 下面引号里的内容随便写..基本上不太怪异的汉字就行... $hanzi = '写几个汉字在里面'; //这里就要用到mb_strlen函数了, 因为汉字是"Multi-Byte, 多字节"字符. 获取到的汉字符串长度, 同样要减去1. $hanzi_len = mb_strlen($hanzi, 'utf-8') - 1; //抽取一个汉字. $single_hanzi = mb_substr($hanzi, rand(0, $hanzi_len), 1, 'utf-8'); // 把随机数存入 session @session_start(); //SESSION['IMGCODE'] = 非中文字符串.中文字符串 $_SESSION['IMGCODE'] = $string.$single_hanzi; $_SESSION['IMGCODE_EXPIRED'] = time() + 15 * 60; // 15分钟后该验证码失效 // 生成验证码图片 $img_width = 90; $img_height = 32; $img = imagecreate($img_width, $img_height); imagecolorallocate($img, 0x66, 0x66, 0x66); $white = imagecolorallocate($img, 0xff, 0xff, 0xff); $ix = 5; $iy = 2; $fontid = imageloadfont(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'sketchey.gdf'); imagestring($img, $fontid, $ix, $iy, $string, $white); //以上是原代码, 我就不做注释了. //继续... //设定字体路径, 然后取一个字体."微软雅黑.ttf" putenv('GDFONTPATH=/font/'); $fontname = 'msyh.ttf'; //用ImageTTFText函数将汉字写到图片上. ImageTTFText ($img, 12, 0, 66, 20, $white, $fontname, $single_hanzi); // 输出图片 header("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG)); imagepng($img); imagedestroy($img); ?>
2. 插件主体.php(UTF-8)

PHP 代码:
< ?php /* Plugin Name: WP-ImgCode Plugin URI: http://www.dualface.com/ Description: 图形验证码 Version: 1.0.0 Author: dualface Author URI: http://www.dualface.com/ */ /* * UpDate By ETiV */ //如果(非 类已存在('wp_imgcode')): //..........易语言?! if(!class_exists('wp_imgcode')): //类名与类中的一个函数名相同: //属于类的构造函数, 这样写可兼容PHP4... class wp_imgcode { var $version = '1.0.0'; var $plugin_dir = '/wp-content/plugins/wp-imgcode'; function wp_imgcode() { @session_start(); add_action('comment_form', array(& $this, 'edit_comment_blog')); add_filter('preprocess_comment', array(& $this, 'preprocess_comment')); } function edit_comment_blog() { //从此处开始修改... //先写两个javascript的函数 //第一个函数, img_reload() //可以重新载入验证码图片... //并且将评论框(comment)及提交按钮解锁. //warning函数, 将在提交上来的验证码错误时, 弹出一个错误提示. //剩下就是基本的HTML了... //**另外, 修正了原作者的 //
//虽然我不知道"{$this->plugin_dir}"中的{}是什么意思,
//但是这样会使在显示单篇帖子时发生错误.
//如果Blog使用了永久链接, 增强搜索引擎优化的话.
//则在察看帖子时, 将会使用当前地址读取图片, 造成图片显示为x.
?>

看不清楚?

< ?php } function preprocess_comment($commentdata) { //strtolower函数, 将字符串变成小写. //这样可以避免验证码大小写输入错误造成的麻烦. if (strtolower($_POST['imgcode']) != strtolower($_SESSION['IMGCODE']) || time() >= $_SESSION['IMGCODE_EXPIRED']) {

//如果错误, 则终止程序运行, 且运行js函数->warning().
die('');
}
unset($_SESSION['IMGCODE']);
unset($_SESSION['IMGCODE_EXPIRED']);
return $commentdata;
}
}

//结束如果;
endif;

/**
* Instatiate the global object.
*/
if( !isset($wp_imgcode) )
{
$wp_imgcode =& new wp_imgcode();
}
?>
总结:
插件不错, 代码简洁, 而且易用性很高...
只不过作者考虑有些欠缺, 会造成一些麻烦...
比如, 如果验证码输入错误, 则必须刷新整个页面才能更换验证图片
(想给输入错误的人带来些惩罚?这惩罚未免太重了吧...)

给我留言

Copyright © 浩然东方 保留所有权利.   Theme  Ality 07032740

用户登录