文件一:<?php
 $now_time=time();//当前时间
$ipfile="./images/ip.txt";//文本数据存放文件
 $old=file($ipfile);  
 $num=count($old);  
 for ($i=0;$i<$num;$i++){  
 list($txtusre,$txtzzip,$txttime)=explode("|",$old[$i]); 
 if($txtzzip=="$REMOTE_ADDR"){//比较访客IP文本数据中是否已存在
//已存在就跳过不记录
}else{//不存在就记录
if (get_magic_quotes_gpc()) {
 if (!$fp = fopen($ipfile, "a+")) {
  die("创建文件失败, 请检查是否有权限.");
 }
 $line = $now_time."|".$REMOTE_ADDR."|".$now_time."\r\n";
 $old=file($ipfile);
 $num=count($old);
 $fp=fopen($ipfile, "w");
 flock($fp,2);
 if($num<100){//只记录100条,超过就删除最后100条前的记录
 fputs($fp,$line);
 for ($i=0;$i<$num;$i++){
 fputs($fp,$old[$i]);
 }}else{
 fputs($fp,$line);
 for($i=0;$i<99;$i++){
 fputs($fp,$old[$i]);
 }}
 fclose($fp);
}}}
?>
文本数据文件ip.txt:
1348308290|127.0.0.1|1348308290
1348308289|127.0.0.1|1348308289
1348308275|127.0.0.2|1348308275
当只有一条记录时,能判断IP已存在,继续添加不存在的IP当有二条记录时,判断已存在IP就失效了,刷新一次就记录一次重复IP
想要效果是:当访客的IP数据文件中不存中就添加一条,如存在,就不添加
请高手帮修正,谢谢

解决方案 »

  1.   

    帮你改好了$REMOTE_ADDR='127.0.0.2';$now_time=time();//当前时间
    $ipfile="./ip.txt";//文本数据存放文件
    IF(!File_Exists($ipfile)){
    File_Put_Contents($ipfile,'',LOCK_EX);
    }
    //取得文本文件的内容
    $fileinfo=File_Get_Contents($ipfile);
    IF(StriStr($fileinfo,$REMOTE_ADDR)===False){//如果IP不存在
    $fileinfo.=CHR(10).time().'|'.$REMOTE_ADDR.'|'.time();
    File_Put_Contents($ipfile,$fileinfo,LOCK_EX);
    }Else{
    Die('IP已经存在了,不需要再记录了!');
    }
      

  2.   

    $REMOTE_ADDR这个变量的值需要你自己获取.
    $now_time=time();//这一行可以删掉不要了.
      

  3.   

    StriStr($fileinfo,$REMOTE_ADDR)===False
    不严密!
    如果 $REMOTE_ADDR='127.0.0.2';
    而文件中有 127.0.0.20
    就误判了
      

  4.   

    $ip = $_SERVER['REMOTE_ADDR'];
    $time = time();
    $ipfile = "./images/ip.txt";
    $s = file_get_contents($ipfile);
    if(strstr($s, "|$ip|")) return; //存在就结束
    $ar = preg_split("/[\r\n]+/", $s); //切割成数组
    $ar = array_slice($ar, 0, 99); //取前99项
    $ar[] = "$time|$ip|$time"; //添加新数据
    file_put_contents($ipfile, join(PHP_EOL, $ar)); //回写文件
      

  5.   

    那么就
    StriStr($fileinfo,'|'.$REMOTE_ADDR.'|')===False