За последние 24 часа нас посетили 18552 программиста и 1671 робот. Сейчас ищут 911 программистов ...

проверка по IP

Тема в разделе "PHP для новичков", создана пользователем mihai, 5 апр 2009.

  1. mihai

    mihai Активный пользователь

    С нами с:
    17 мар 2009
    Сообщения:
    40
    Симпатии:
    0
    написал скрипт где
    проверяем пришедшего пользователя по ip
    но
    проблем в том что при заходе на скрипт происходит запись ip в файл
    и условие if else
    проверяет тот ip который пришёл
    с уже с тем который записали
    и естественно выдаёт true
    но
    если не записывать пришедший ip
    то функция in_array
    выдаёт что ей нечего не счем сравнивать
    а как
    сделать так чтобы сначало проверить пришедший ip
    есть ли он в массиве
    а только потом записывать его или не записывать
    PHP:
    1.  
    2. <?
    3. $ip=$_SERVER["REMOTE_ADDR"];
    4. echo "ваш ip $ip<br>";
    5.  
    6. $myfilerecord="ipdb.txt";
    7. $openrecord=fopen($myfilerecord,"a");
    8. fwrite($openrecord, $ip."\n");
    9. fclose($openrecord);
    10.  
    11.  
    12. $myfileread="ipdb.txt";
    13. $openread=fopen($myfileread, "r");
    14. $read=fread($openread,filesize($myfileread));
    15. fclose($openread);
    16. echo "Это данные уже записанные в БД $read<br>";
    17.  
    18.  
    19. $ip2=file($myfilerecord);
    20.  
    21. if
    22. (in_array($ip."\n",$ip2)==true)
    23. {
    24.  
    25. exit ("есть такой ip");
    26. }
    27. else
    28. {
    29. echo "нет такой ip";
    30.  
    31. }
    32. ?>
    33.  
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    не
    уловил
    мыслей
    потому
    что
    сумбур
     
  3. mihai

    mihai Активный пользователь

    С нами с:
    17 мар 2009
    Сообщения:
    40
    Симпатии:
    0
    определяем ip
    записываем ip
    далее условие

    если такой ip есть то
    {
    то вот так
    }
    {
    иначе вот так
    }

    но проблема в том что записав IP в условии сравнивается ip с которого сейчас зашли стем что мы только что записали

    а если вначале не записывать ip то не работает функция in_array потому что сравнивать не чего

    как сделать что бы сначала проверить ip а потом записать
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Если Вы вообще первый посетитель, то да -- нечего.

    Именно ваш вариант можно переделать так:
    PHP:
    1.  
    2. <?php
    3. $ip2=file($myfilerecord);
    4. if (is_array($ip2) === true) {
    5.     if (in_array($ip."\n",$ip2) == true)
    6.         exit ("есть такой ip");
    7.     else
    8.         echo "нет такой ip";
    9. }
    10. else {
    11.     echo "нет такой ip";
    12. }
    13.  
    По поводу реализации:
    1) Советовал бы работать с БД, если есть возможность и желание, да и скорость там будет заметно выше.
    2) IP у Вас сравниваются как строки, рекомендую переводить их в числа с помощью ip2long
    3) Если в IP будет много, то открывать файл, а потом преобразовывать в массив и искать в нем будет очень долго.
    Советую так:
    PHP:
    1.  
    2. <?php
    3. //Получаем IP
    4. $ip = ip2long($_SERVER["REMOTE_ADDR"]);
    5.  
    6. //Читаем файл
    7. $basename = "ips.txt";
    8. $resourse = fopen($basename, "r+");
    9. $ips = fread($resourse, filesize($basename));
    10.  
    11. if (strpos($ips, $ip) === false) {
    12.     echo 'Приветствуем на сайте!';
    13.     fwrite($resourse, $ip.' ');
    14.     fclose($resourse);
    15. }
    16. else {
    17.     fclose($resourse);
    18.     die("Вы уже посещали сайт :(");
    19. }
    20.