巧合,这种东西我可没写过,而且我也是刚学php,好多语法都不是简单的。有些功能用函数能实现的我却非要自己写一个函数来用………真丢人,不过给新手一个学*过程的提示吧。 自动摇奖系统: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了,就删掉当前行。没有的话就接着比较。 这里有一个问题,就是删掉当前行上的时间+IP,这个……我是新学啊,不知道有没有函数可以直接做到,反正别人告诉我没有,我就自己写了一个。方法是用读数组的file();来读入数组变量。然后从要删掉的那个位置开始把后面的都向前移动。然后再写回去,注意,最后一个不写,就大功告成了。 for ($i=$Line_delete;$i<count($Filedelete)-1;$i++) 如果哪位老大知道有直接删行的函数告诉我吧。 请又说回来。这个删除函数带入的值就是当前指针的位置,怎么做呢?
这样就行。 记得要关掉文件哦: fclose($File);
|