This Might Be Useful

Полноценная функция для получения IP-адреса клиента

Небольшая, но очень полезная функция для получения IP-адреса клиента. Основной плюс - в отличии от большинства решений учитывает не только REMOTE_ADDR.
Собственно публикую чтобы не потерять. А то регулярно ищу это дело по старому коду :).

PHP:
  1. function GetIP() {
  2.   if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
  3.      $ip = getenv("HTTP_CLIENT_IP");
  4.   else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
  5.      $ip = getenv("HTTP_X_FORWARDED_FOR");
  6.   else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
  7.      $ip = getenv("REMOTE_ADDR");
  8.   else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
  9.      $ip = $_SERVER['REMOTE_ADDR'];
  10.   else
  11.      $ip = "unknown";
  12.   return $ip;
  13. } // GetIP

· Создание PDF-файлов с помощью PHP и FPDF
· ООП в JavaScript - правильное объявление классов, методов и свойств
· Уменьшаем нагрузку на сервер - кэширование данных для ускорения генерации страницы
· MySQL функция для конвертирования bigint IP адресов в удобоваримые varchar
· Динамическое создание обработчиков событий

- Коментировать
- Trackback

10 Responses to “Полноценная функция для получения IP-адреса клиента”


  1. Максуд Says:

    А почему REMOTE_ADDR не достаточно? С точки зрения подделки IP? Или бывают случаи когда REMOTE_ADDR ничего не отдает?

  2. Денис Радченко Says:

    Если человек сидит за прокси, то REMOTE_ADDR отдаст IP прокси.

  3. Максуд Says:

    А можно подробнее? Я пробил этот скрипт через webwarper.net c комментироваием одного за другим ifelse, но не получил ничего, кроме IP webwarper. А ведь он как прокся работает.
    Не только мне будет интересно.
    Я в общем-то ламер, только лишь умею адаптировать чужие куски кода и клеить их вместе. Я не кодер, я при разработке puzzle собираю каждый раз из дступных в Нете кусочков.

  4. Денис Радченко Says:

    Прокси не обязан отдавать IP адрес пользователя. Некоторые отдают, некоторые нет.

  5. Максуд Says:

    ОК.
    А если я переиначу функцию и вместо присвоения на каждом шаге задам ей Эхо, то где и на чем я смогу получить такую ситуацию, в которой я получу разные IP? Куда я должен смотреть? Что почитать? Я говорю как ламер (и признаюсь) , а не с целью найти подвох. С целью образования. Мне пригодится. И не только мне.

  6. Максуд Says:

    Да, и еще. В каком-то из предыдущих постов ты упомянул о том, что при валидации не надо инвалидов искать, надо следить чтобы все были валиды. А где в этом случае потенциальная лазейка?

  7. Денис Радченко Says:

    Максуд Разные IP будут. Тут нужно читать форумы вроде XPoint, потому что ситуация на границе PHP и протокола HTTP.

    По поводу второго вопроса - не знаю, но как-то на подсознательном уровне кажется что 2-й вариант лучше.

    P.S. я не автор блога :)

  8. Максуд Says:

    Спасибо за консультацию. На всякий случай буду пользоваться, хотя несколько web-proxy и webwarper выдают одно и то же:
    http://blog.yudin.eu/getip.php

  9. Виктор Says:

    Довольно удобно, надо взять на заметку, благодарю!

  10. Пристрел Says:

    да.. очень полезно.. спасибо..

Leave a Reply