За последние 24 часа нас посетили 17596 программистов и 1613 роботов. Сейчас ищут 1820 программистов ...

Вывод ссылки в зависимости от ip посетителя

Тема в разделе "PHP для новичков", создана пользователем DjSunday, 27 июл 2010.

  1. DjSunday

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

    С нами с:
    27 ноя 2008
    Сообщения:
    20
    Симпатии:
    0
    Задача, думаю, простая:
    Есть несколько диапазонов ip-адресов. Если пользователь попадает в 1-й диапазон, то видит ссылку №1, если во 2-й, то ссылку №2 и т.д. Если же пользователь не попадает в ни в какой из диапазонов, то он тоже видит отдельную ссылку.
    Если разбить на подзадачи, то я могу их частично реализовать, но как это всё дело объединить?
     
  2. phpdude

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

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    а в чем сложность? задача тривиальная.
     
  3. DjSunday

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

    С нами с:
    27 ноя 2008
    Сообщения:
    20
    Симпатии:
    0
    У меня с синтаксисом проблемы (пора наконец-то купить учебник по php).
    Я понимаю, что тривиально определить ip через $_SERVER['REMOTE_ADDR'], сравить его с диапазоном, и через echo вывести ссылку. Но это всё на словах пока.
     
  4. phpdude

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

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    сделайте это, почитайте недельку, вренетесь сюда со словами "спасио парни, я прозрел, давно надо было это сделать. ведь задача и правда была тривиальная!"
     
  5. DjSunday

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

    С нами с:
    27 ноя 2008
    Сообщения:
    20
    Симпатии:
    0
    У меня конкретный вопрос по конкретной задаче.
     
  6. phpdude

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

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    DjSunday
    а я вам конкретно ответи по вашему вопросу, если вы не знаете основ, то как вы хотите это сделать? или хотите чтобы за вас написали? если так, то так и скажите и баксов 10-20 с письмом приложите, как все цивилизованные люди делают. почему когда надо сделать стрижку, то идут в парикмахерскую, а не открывают интернет, спрашивают на форуме и пытаются подстрич себя сами?
     
  7. DjSunday

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

    С нами с:
    27 ноя 2008
    Сообщения:
    20
    Симпатии:
    0
    Вот код который генерирует ссылку №1 исходя из нескольких ip-диапазонов:
    PHP:
    1. <?php
    2.  $IPs_arr = array
    3.     (
    4.         array('178.234.67.0',        '178.234.67.225'),
    5.         array('93.127.15.0',        '93.127.15.225'),
    6.     );
    7.  
    8.     $my_ip2long = @ip2long($_SERVER['REMOTE_ADDR']);
    9.  
    10.     foreach($IPs_arr as $IPs)
    11.     {
    12.         if
    13.         (
    14.             $my_ip2long >= @ip2long($IPs[0]) &&
    15.             $my_ip2long <= @ip2long($IPs[1])
    16.         )
    17. echo '<a href="link1">Ссылка1</a>';
    18.     }
    19. ?>
    1. Как лучше впихнуть сюда генерацию ссылки №2 из совершенно других диапазонов?
    2. Как сделать так чтобы пользователи, не входящие ни в один из диапазонов, видели свою ссылку?
     
  8. phpdude

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

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    DjSunday
    break добавьте в условие, а то вдргу пересещающиеся диапазоны попадутся - человек несоклко ссылок увидит :)
     
  9. DjSunday

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

    С нами с:
    27 ноя 2008
    Сообщения:
    20
    Симпатии:
    0
    PHP:
    1. <?php
    2.                                       // IP-диапазон №1
    3.  
    4.  $IPs_arr = array
    5.     (
    6.         array('81.20.192.0',        '81.20.207.255'),
    7.         array('195.34.224.0',        '195.34.255.255'),
    8.         array('95.179.0.0',        '95.179.127.255'),
    9.         array('172.234.0.0',        '172.234.255.255'),
    10.     );
    11.  
    12.     $my_ip2long = @ip2long($_SERVER['REMOTE_ADDR']);
    13.  
    14.     foreach($IPs_arr as $IPs)
    15.     {
    16.         if
    17.         (
    18.             $my_ip2long >= @ip2long($IPs[0]) &&
    19.             $my_ip2long <= @ip2long($IPs[1])
    20.         )
    21. echo '<a href="link1.ru">Ссылка №1</a>';
    22.     }
    23.  
    24.                                      // IP-диапазон №2
    25.  
    26.  $IPs_arr2 = array
    27.     (
    28.         array('83.80.92.0',        '83.80.92.255'),
    29.         array('100.34.224.0',        '100.34.255.255'),
    30.         array('50.179.0.0',        '50.179.127.255'),
    31.         array('178.234.0.0',        '178.234.255.255'),
    32.     );
    33.  
    34.     $my_ip2long2 = @ip2long($_SERVER['REMOTE_ADDR']);
    35.  
    36.     foreach($IPs_arr2 as $IPs)
    37.     {
    38.         if
    39.         (
    40.             $my_ip2long2 >= @ip2long($IPs[0]) &&
    41.             $my_ip2long2 <= @ip2long($IPs[1])
    42.         )  
    43.  echo '<a href="link2.ru">Ссылка №2</a>';
    44.     }
    45.  
    46.                        // Проверка если пользователь не попадает в IP-диапазоны №1 и №2
    47.  
    48.  $IPs_arr3 = array
    49.     (
    50.         array('81.20.192.0',        '81.20.207.255'),
    51.         array('195.34.224.0',        '195.34.255.255'),
    52.         array('95.179.0.0',        '95.179.127.255'),
    53.         array('172.234.0.0',        '172.234.255.255'),
    54.         array('83.80.92.0',        '83.80.92.255'),
    55.         array('100.34.224.0',        '100.34.255.255'),
    56.         array('50.179.0.0',        '50.179.127.255'),
    57.         array('178.234.0.0',        '178.234.255.255'),
    58.     );
    59.  
    60.     $my_ip2long3 = @ip2long($_SERVER['REMOTE_ADDR']);
    61.  
    62.     foreach($IPs_arr3 as $IPs3)
    63.     {
    64.         if
    65.         (
    66.             $my_ip2long3 >= @ip2long($IPs3[0]) &&
    67.             $my_ip2long3 <= @ip2long($IPs3[1])
    68.         )   {}
    69.         else {echo ('<a href="link3.ru">Ссылка №3</a>');}
    70.     }
    71. ?>
    Почему если пользователь не попадает в каждый из 8 диапазонов, то выводится Ссылка №3 восемь раз (нужно один раз), а если попадает, то один раз "своя" ссылка и семь раз Ссылка №3 (нужна только своя ссылка)?
    (понятно что выводится значение для каждого диапазона). Break куда впихнуть?
     
  10. DjSunday

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

    С нами с:
    27 ноя 2008
    Сообщения:
    20
    Симпатии:
    0
    Внёс изменения в последнюю часть кода, отвечающую за выявление ip не входящего в диапазон. Посмотрите пожалуйста, код вроде рабочий, но требуется подтверждение спеца!
    PHP:
    1. <?php
    2. // IP-диапазон №1
    3.  $IPs_arr = array
    4.     (
    5.         array('81.20.192.0',        '81.20.207.255'),
    6.         array('195.34.224.0',        '195.34.255.255'),
    7.         array('95.179.0.0',        '95.179.127.255'),
    8.         array('171.234.0.0',        '171.234.255.255')
    9.     );
    10.  
    11.     $my_ip2long = @ip2long($_SERVER['REMOTE_ADDR']);
    12.  
    13.     foreach($IPs_arr as $IPs)
    14.     {
    15.         if
    16.         (
    17.             $my_ip2long >= @ip2long($IPs[0]) &&
    18.             $my_ip2long <= @ip2long($IPs[1])
    19.         )
    20. echo '<a href="link1.ru">Ссылка №1</a>';
    21.     }
    22. // IP-диапазон №2
    23.  $IPs_arr2 = array
    24.     (
    25.         array('83.80.92.0',        '83.80.92.255'),
    26.         array('100.34.224.0',        '100.34.255.255'),
    27.         array('50.179.0.0',        '50.179.127.255'),
    28.         array('178.234.0.0',        '178.234.255.255')
    29.     );
    30.  
    31.     $my_ip2long2 = @ip2long($_SERVER['REMOTE_ADDR']);
    32.  
    33.     foreach($IPs_arr2 as $IPs2)
    34.     {
    35.         if
    36.         (
    37.             $my_ip2long2 >= @ip2long($IPs2[0]) &&
    38.             $my_ip2long2 <= @ip2long($IPs2[1])
    39.         )  
    40.  echo '<a href="link2.ru">Ссылка №2</a>';
    41.  
    42.     }
    43. // Проверка если пользователь не попадает в IP-диапазоны №1 и №2
    44.  function test_IP()
    45. {
    46.     $IPs_arr3 = array
    47.     (
    48.         array('81.20.192.0',        '81.20.207.255'),
    49.         array('195.34.224.0',        '195.34.255.255'),
    50.         array('95.179.0.0',        '95.179.127.255'),
    51.         array('171.234.0.0',        '171.234.255.255'),
    52.         array('83.80.92.0',        '83.80.92.255'),
    53.         array('100.34.224.0',        '100.34.255.255'),
    54.         array('50.179.0.0',        '50.179.127.255'),
    55.         array('178.234.0.0',        '178.234.255.255')
    56.     );
    57.  
    58.     $my_ip2long3 = @ip2long($_SERVER['REMOTE_ADDR']);
    59.  
    60.     foreach($IPs_arr3 as $IPs)
    61.     {
    62.         if
    63.         (
    64.             $my_ip2long3 >= @ip2long($IPs[0]) &&
    65.             $my_ip2long3 <= @ip2long($IPs[1])
    66.         )
    67.  
    68.         return true;
    69.     }
    70.  
    71.     echo '<a href="link3.ru">Ссылка №3</a>';;
    72. }
    73.  
    74. test_IP();  
    75. ?>
     
  11. phpdude

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

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    я иногда поражаюь как долго решаются простые задачи)) но я рад что перфекционизмом страдаю не только Я :)