2015-05-15 3 views
-1

Я хочу иметь скрипт, который регистрирует только IP-адрес, который еще не был зарегистрирован в текстовом файле. Я надеюсь, что смогу это сделать без использования MySQL или любой другой базы данных.Запись уникальных IP-адресов с использованием PHP

IP хранятся как это:

IP: 127.0.0.1 15 May, 2015, 12:01 pm 

В принципе, я не хочу, чтобы журнал, чтобы выглядеть следующим образом:

IP: 127.0.0.1 15 May, 2015, 12:01 pm 
IP: 127.0.0.1 15 May, 2015, 12:08 pm 
IP: 127.0.0.1 15 May, 2015, 12:17 pm 

Прямо сейчас, вот мой PHP код:

$check = fopen("ip.txt", "r"); 
$ip = $_SERVER['REMOTE_ADDR']; 
$exists = FALSE; 

while ($ln = fgetcsv($check, 200, "\n") !== FALSE) { 
     if ($ln[1] == $_SERVER['REMOTE_ADDR']) { 
      $exists = TRUE; 
     } 
} 
fclose($check); 

if ($exists == TRUE) { 
    // do nothing 
} 
else if ($exists == FALSE) { 
    $file = fopen("ip.txt", "a"); 
    $date = date("j F, Y, g:i a"); 
    $string = "IP: " . $ip . " " . $date . "\n"; 
    fwrite($file, $string); 
    fclose($file); 
} 

Выше в данный момент не работает, и у меня есть много повторяющихся IP-адресов в моем ip.txt файлах. Любая помощь будет принята с благодарностью.

+0

Сколько уникальных IP-адресов вы ожидаете захватить? – Lance

+1

Вы откроете текстовый файл и проанализируете его когда-нибудь, когда кто-то попадет на ваш сайт. Другой подход может заключаться в том, чтобы добавить к файлу и позаботиться о дублировании, когда вы хотите прочитать данные. – bryjohns

+2

Почему бы вам не использовать базу данных для этого? По вышеуказанной причине, простой поиск, разделение, запросы, список может продолжаться. – Devon

ответ

1
$ln = fgetcsv($check, 200, "\n") !== FALSE 

Как сравнения (! ==) имеют более высокий приоритет, то назначение, линия выше эквивалентно следующему:

$ln = (fgetcsv($check, 200, "\n") !== FALSE) 

в то время как вы, вероятно, хотел, чтобы что-то подобное читал:

($ln = fgetcsv($check, 200, "\n")) !== FALSE 

Примечание: я не проверял остальную часть кода.

Смежные вопросы