2016-05-23 130 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

相關問題