PHP Fusion 7是一个开源的内容管理系统,它允许用户创建和管理网站。为了增强安全性,CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)被广泛用于验证用户输入。本文将介绍如何在PHP Fusion 7项目中使用CAPTCHA类。
首先,需要为存储CAPTCHA代码创建一个数据库和表。以下是创建数据库和表的SQL语句:
CREATE DATABASE `phpfusion7`;
DROP TABLE IF EXISTS `phpfusion7`.`fusion_captcha`;
CREATE TABLE `phpfusion7`.`fusion_captcha` (
`captcha_datestamp` int(10) unsigned NOT NULL default '0',
`captcha_ip` varchar(20) NOT NULL,
`captcha_encode` varchar(32) NOT NULL default '',
`captcha_string` varchar(15) NOT NULL default '',
PRIMARY KEY (`captcha_datestamp`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
如果更改了数据库或表的名称,还需要在类文件中更改一些信息,比如config.php
和multisite_include.php
。
接下来,需要创建一个包含数据库设置的PHP文件,这里使用PHP Fusion的默认文件config.php
。
<?php
// 数据库设置
$db_host = "localhost";
$db_user = "root";
$db_pass = "";
$db_name = "phpFusion7";
$db_prefix = "fusion_";
define("DB_PREFIX", "fusion_");
?>
已经将这个文件复制到项目中,名为multisite_include.php
。这个文件存在于PHP Fusion项目中,包含了数据库表的名称。
在PHP Fusion 7中,securimage.php
包含了CAPTCHA类。现在让看看如何调整这个类的变量。
<?php
var $image_width = 140; // CAPTCHA图像的宽度
var $image_height = 45; // CAPTCHA图像的高度
var $image_type = SI_IMAGE_PNG; // CAPTCHA图像类型
var $code_length = 4; // CAPTCHA代码的长度
var $charset = 'ABCDEFGHKLMNPRSTUVWYZ23456789'; // 创建CAPTCHA代码的所有字符
var $use_wordlist = true; // 使用文件中的字符
var $use_gd_font = false; // 使用GD字体
var $gd_font_file = 'gdfonts/bubblebath.gdf'; // GD字体的名称
var $gd_font_size = 20; // GD字体的大小
var $ttf_file = './elephant.ttf'; // TTF字体文件的路径
var $font_size = 24; // TTF字体的大小
var $text_angle_minimum = -20; // CAPTCHA代码的最小角度
var $text_angle_maximum = 20; // CAPTCHA代码的最大角度
var $text_x_start = 8; // 写入CAPTCHA代码的X位置的开始
var $text_minimum_distance = 30; // CAPTCHA单词之间的最小距离
var $text_maximum_distance = 33; // CAPTCHA单词之间的最大距离
var $image_bg_color = '#e3daed'; // CAPTCHA图像的背景色
var $text_color = '#ff0000'; // CAPTCHA图像的文本颜色
var $use_multi_text = true; // 多彩文本
var $multi_text_color = '#0a68dd,#f65c47,#8d32fd'; // 多彩文本颜色
var $use_transparent_text = true; // 显示透明文本
var $text_transparency_percentage = 50; // CAPTCHA代码透明度的百分比
var $draw_lines = true; // 在CAPTCHA图像中绘制线条
var $line_color = '#80BFFF'; // 线条的颜色
var $line_distance = 5; // 线条之间的距离
var $line_thickness = 1; // 线条的厚度
var $draw_angled_lines = false; // 绘制有角度的线条
var $draw_lines_over_text = false; // 在文本上绘制线条
var $arc_linethrough = true; // 在CAPTCHA图像中的单词上绘制两个弧线
var $arc_line_colors = '#8080ff'; // 弧线的颜色
var $audio_path = './audio/'; // 音频文件的路径
?>
这些变量允许自定义CAPTCHA的外观和行为。
securimage_show.php
用于生成CAPTCHA图像。需要正确地使用它。
<script language="javascript" type="text/javascript">
function RefreshCaptcha() {
var captchaImage = document.getElementById('captcha');
captchaImage.src = 'securimage/securimage_show.php?sid=' + Math.random();
return false;
}
</script>
<img src="securimage/securimage_show.php?sid=' + Math.random();" alt="Validation Code" name="captcha" width="145" height="45" align="left" id="captcha" />
<a onclick="RefreshCaptcha();" href="#">
<img align="top" alt="" src="securimage/images/refresh.gif" />
</a>
<a href="securimage/securimage_play.php">
<img align="top" style="margin-bottom: 1px;" alt="" src="securimage/images/audio_icon.gif" />
</a>
这段代码将在网页上显示CAPTCHA图像,并允许用户刷新和播放音频。
最后,可以通过MySQL查询来访问CAPTCHA代码。以下是PHP代码示例:
<?php
function getCode() {
require_once("config.php");
require_once("securimage/multisite_include.php");
mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name);
$result = mysql_query("SELECT MAX(captcha_datestamp), captcha_string FROM ".DB_CAPTCHA." WHERE captcha_ip='".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
if (mysql_num_rows($result)) {
$data = mysql_fetch_assoc($result);
return strtoupper($data['captcha_string']);
} else {
return "";
}
}
$captchaCode = getCode();
echo $captchaCode;
?>
这段代码将从数据库中检索最新的CAPTCHA代码,并将其转换为大写字母。