2016-05-23 131 views
0

我有一个记录用户IP地址的文本文件,我试图将每个现有地址与访问者的IP地址进行比较以查看它们是否匹配。如何将文本文件的行与变量进行比较

如果它们不匹配,我想将用户的IP地址写入文本文件 - 否则我不希望将任何内容写入文本文件。

目前,所有IP地址正在写入文本文件,即使它们匹配。任何帮助表示赞赏,在此先感谢。

<?php 
$ip = $_SERVER['REMOTE_ADDR']; 
$ipFile = 'ip.txt'; 
$openip = fopen($ipFile, 'r'); 
$exists = false; 

while(!feof($openip)) 
{ 
    $existingip = fgets($openip); 

    if($existingip == $ip) { 
     echo "Your ip already exists <br>"; 
     $exists = true; 
    } 
} 
fclose($openip); 

if($exists == false) { 
    $openip = fopen($ipFile, 'a'); 
    fwrite($openip, $ip . "\r\n"); 
    echo "Your IP has been logged <br>"; 
    fclose($openip); 
} 
else { 
    echo "Your IP is already stored <br>"; 
} 
?> 
+1

为什么不使用数据库? INSERT IGNORE'会简单得多。 – DocRattie

回答

1

使你的代码更raedable:

$file = file($ipFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
if (in_array($ip, $file)) 
     echo "Your ip already exists <br>"; 
else { 
    $openip = fopen($ipFile, 'a'); 
    fwrite($openip, $ip . "\r\n"); 
    echo "Your IP has been logged <br>"; 
    fclose($openip); 
} 
+0

非常感谢,这解决了我的问题。 – Jack

+0

乐意提供帮助。祝你好运! – splash58

0
$ip = $_SERVER['REMOTE_ADDR']; 
$ipFile = 'ip.txt'; 
If(preg_match_all("/".preg_quote($ip)."/", file_get_contents($ipFile)){ 
     Echo "Your IP is already stored <br>"; 
}else{ 
     //append file as you do now 
} 
1

你可以试着将文件读入一个数组:

$arrayIpFile = file($ipFile); 

if(in_array($ip, $arrayIpFile)){ 
    //Exist 
}else{ 
// not exists 
} 
+0

也谢谢,在你之前飞溅到这里,这就是为什么我给他打勾的原因。 – Jack

相关问题