自动摇奖系统:24小时内不能重复IP,先从这里开始。
$ip=getenv("remote_addr");///取IP值存入$ip,当然,ip的格式是2.2.2.2啊。但是要把ip记录下来……一个文件里就要有几万行了。麻烦。我把ip的最后一位取下来,做文件名来用。这样就有255个文件了,每个文件里只存前三个类。
方法:$ipip=explode(".",$ip);把ip以.分段存入$ipip这个数组中。
这样,IP头就等于:$Head = $ipip[0].".".$ipip[1].".".$ipip[2];
打开文件时就可以用:$File = @fopen($Dir_File.$ipip[3].".txt","r");
用if ($File)做条件开始,这样可以在没有$Dir_File.$ipip[3].".txt"的时候自己用else来建立一个文件。
while(!feof($File))////当没有到文件尾时…
.........
$OldIP=explode("|",fgets($File,255));取出当前行来,因为txt里的格式是要用时间+IP来保存的,所以,中间用|来分格,这样,$OldIP就存了两个值。IP时间和IP C类。
$OldIP[0]用来做时间和现在的date("U")来比较过24小时的秒数86400了,就删掉当前行。没有的话就接着比较。
if (($Head."
")==$OldIP[1])
因为每一行最后有一个
的换行,所以要加上一起比吧。
这里有一个问题,就是删掉当前行上的时间+IP,这个……我是新学啊,不知道有没有函数可以直接做到,反正别人告诉我没有,我就自己写了一个。方法是用读数组的file();来读入数组变量。然后从要删掉的那个位置开始把后面的都向前移动。然后再写回去,注意,最后一个不写,就大功告成了。
function delete($Line_delete)
{//delete开始
global $ipip;///这些在前面都定义了的
global $ip;///这些在前面都定义了的
global $Head;///这些在前面都定义了的
global $Dir_File;///这些在前面都定义了的
$Filedelete = file($Dir_File.$ipip[3].".txt");
for ($i=$Line_delete;$i<count($Filedelete)-1;$i++)
{
$Filedate[$i]=$Filedate[$i+1];
}
$File_reputs=fopen($Dir_File.$ipip[3].".txt","w");
$reback_goto=count($Filedelete);
for ($i=0;$i<$reback_goto;$i++)
{
fputs($File_reputs,$Filedelete[$i]
| 对此文章发表了评论 |
