您的位置:首页 > 其它

关于投票ip限制的一种手段

2012-09-28 15:05 134 查看
项目中有这样的一个功能,截图如下:



1、不用多说大家都应该明白这是一个什么样的功能,其实就是一个投票。

2、要求是要限制用户的ip,一个用户只能投一次。

3、用户第一次投票提示投票成功并且所支持方的票数要累计一,再次投票提示用户您已经投过了。

4、页面在加载完以后如果用户投过票,所支持方是active状态,反对方是gray状态。

经过分析,要获取用户的两个数据:ip和他支持方的标记,获取数据简单关键是怎么存储数据,本文采用了文件存储的方式,在项目里建立一个ini文件(如:ip.ini),把获取的数据按‘ip=flag;’(如:127.0.0.1=1;其中127.0.0.1是ip、1标记用户支持图中的蓝方)这种格式保存起来如下图:



剩下的就是对这个文件进行处理了,可以采用parse_ini_file()array_key_exists(),关于这两个函数的介绍如下:

parse_ini_file:

格式:array parse_ini_file ( string $filename [, bool $process_sections ] );

$filename是要解析的ini文件。

$process_sections设置获取数组的维数,如果是true可以获取多维数组,默认的是false。

函数的返回值是联合数组。

array_key_exists:

格式:boolean array_key_exists(string $key,array $array);

$key要检测的键名。

$array被检测的数组。

函数返回boolean值,true存在,false不存在。

该功能中用到的函数如下:

/**

* 读取客户端ip

*/

function rrip(){

return $_SERVER['REMOTE_ADDR'];

}

/**

* 读取ip集合

*/

function rips(){

return parse_ini_file('ip.ini');

}

/**

* ip 地址记录

* @param string $ip ip地址

* @param int $f 1表示赞成 0表示反对

*/

function wip($ip, $f){

$str = $ip . '=' . $f . ";\r\n";

file_put_contents('ip.ini', $str, FILE_APPEND);

}

/**

* 读取 pk 数据

*/

function rpk(){

//标记用户是否pk过 true是false不是

$success = false;

//用户ip

$ip = rrip();

//已经记录的ip

$ips = rips();

//用户支持方的标记

$f = 0;

//ips集合非空 并且ip存在ips中 说明用户投过票

if(!empty($ips) && array_key_exists($ip, $ips)){

$success = true;

$f = $ips[$ip];

}

//蓝方支持数

$zc = file_get_contents('zancheng.txt');

//红方支持数

$fd = file_get_contents('fandui.txt');

echo $_GET['rpk'] . '(' . json_encode(array('zc' => $zc, 'fd' => $fd, 'success' => $success, 'f' => $f)) . ')';

}

/**

* 更新 pk 数据

*/

function upk(){

//标记是否统计 true是 false是否

$success = true;

//用户ip

$ip = rrip();

//已经记录的ip

$ips = rips();

//ips集合非空 并且ip存在ips中 不能统计

if(!empty($ips) && array_key_exists($ip, $ips)){

$success = false;

}else{

$success = true;

}

if($success){

//标记是 赞成 还是 反对 1赞成 0反对

$f = $_GET['f'];

//赞成

if($f){

$count = file_get_contents('zancheng.txt');

$count = intval($count) + 1;

file_put_contents('zancheng.txt', $count);

}else{

$count = file_get_contents('fandui.txt');

$count = intval($count) + 1;

file_put_contents('fandui.txt', $count);

}

//记录ip 和 标记

wip($ip, $f);

echo $_GET['upk'] . '(' . json_encode(array('success' => true)) . ')';

}else{

echo $_GET['upk'] . '(' . json_encode(array('success' => false)) . ')';

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: