Как получить ip пользователя php
Перейти к содержимому

Как получить ip пользователя php

  • автор:

Как получить IP через PHP для сервера и пользователя

php-uznat-ip-adres

Доброго времени суток ��

На практике часто возникает необходимость узнать IP в PHP скрипте сайта. Причём, это может быть как IP адрес сервера, так и посетителя, производящего действия на вашем ресурсе.

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

Но, к счастью, в PHP получить IP адрес как клиента, так и самого сайта в этом случае более, чем реально. Причём, для этого не потребуются никакие специальные библиотеки и средства движков сайтов. Всё необходимое уже есть в самом PHP «на борту».

Нам осталось только пользоваться ��

Как в PHP узнать IP сервера

Вся необходимая информация об IP сервера, да и пользователя тоже, в PHP доступна через суперглобальный массив $_SERVER. Однако, помимо перечисленных данных он содержит ещё много различной информации.

В этой ситуации отыскать нужное становится непростой задачей, для решения которой нужно знать назначение переменных массива.

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

Данный PHP код позволит вам вывести на экран IP адрес сервера, на котором он запускается. Это же значение будет и IP адресом сайта, если он вам где-нибудь понадобится.

Как в PHP получить IP посетителя

Для определения в PHP IP пользователя, с которого он подключается к вашему сайту, мы воспользуемся тем же массивом $_SERVER. В данном случае нас будет интересовать переменная REMOTE_ADDR, содержимое которой можно вывести на экран привычным способом:

Однако, в случаях использования клиентом прокси соединений, т.е. когда при подключении трафик идёт через сторонний прокси сервер, данная переменная будет содержать IP адрес не посетителя, а прокси сервера.

Чтобы узнать в PHP IP адрес посетителя в данном случае, нужно воспользоваться другим способом.

http://cccp-blog.com/wp-includes/images/banners/templatemonster/banner_content.jpg

Как в PHP определить IP пользователя, использующего прокси

Первым делом, в PHP IP посетителя при использовании прокси можно попробовать получить следующим способом:

Данный код можно найти практически во всех PHP скриптах, определяющих реальный IP посетителя. Однако, мало кто может объяснить, что хранится в данной переменной.

Если прописать данный код у себя в сайте на локальном сервере, то вы вообще получите пустое значение, т.е. данной переменной в массиве $_SERVER у вас не окажется. И это не удивительно, т.к. в HTTP_CLIENT_IP хранится глобальный IP пользователя, т.е. его адрес в сети Интернет.

И, самое главное, что на это значение не влияет прокси соединение, т.е. здесь вы найдёте реальный IP пользователя, а не его прокси сервера.

Если по каким-то причинам данная переменная будет отсутствовать в PHP $_SERVER, то можете попробовать узнать IP адрес клиента ещё и таким способом:

В данную переменную прокси сервера сами помещают реальный IP посетителя.

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

Данный скрипт выведет на экран значение переменной $ip, в которую при использовании прокси соединения будет записан глобальный IP посетителя. Если же его не будет найдено в PHP $_SERVER, то скрипт попытается узнать IP пользователя, записанный самим прокси сервером.

Если же ни одной переменной не будет присвоено значение, то с большой вероятностью можно предположить, что посетитель не использует прокси либо прокси сервер не предоставляет реальный IP посетителя. В этом случае, чтобы получить хоть какое-то значение IP, мы берём его из REMOTE_ADDR. Но, с высокой долей вероятности, это значение будет IP адресом прокси сервера (благо, что ими не пользуется абсолютно каждый клиент сайтов).

Для проверки существования значений переменных я, как видите, решил воспользоваться PHP функцией filter_var, которая фильтрует переменные с применением определённого фильтра (шаблона), которым в данном случае является FILTER_VALIDATE_IP.

В завершение хочу подытожить, что описанным выше способом, несмотря на все тщательные проверки всех возможных серверных переменных PHP, определить IP пользователя с использованием прокси всё равно не получится на 100%.

Дело в том, что IP адрес клиента предоставляют только определённый тип прокси серверов, которые называют «прозрачными». Как правило, это открытые службы.

Библиотека курсов

Если же ваш пользователь решил скрыть свой реальный IP с помощью коммерческого непрозрачного прокси, то шансы узнать его реальный адрес стремятся к нулю. Благо, что процент таковых клиентов совсем невелик, так что приведённая финальная версия скрипта поможет вам в большинстве случаев.

Оставляйте свои отзывы в комментариях — что понравилось, что нет, может быть, о чём-то следовало бы рассказать поподробнее… Мне интересно любое ваше мнение.

До новых встреч ��

P.S.: если вам нужен сайт либо необходимо внести правки на существующий, но для этого нет времени и желания, могу предложить свои услуги.

Более 5 лет опыта профессиональной разработки сайтов. Работа с PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular и другими технологиями web-разработки.

Опыт разработки проектов различного уровня: лендинги, корпоративные сайты, Интернет-магазины, CRM, порталы. В том числе поддержка и разработка HighLoad проектов. Присылайте ваши заявки на email cccpblogcom@gmail.com.

И с друзьями не забудьте поделиться ��

geoip_isp_by_name

Функция geoip_isp_by_name() возвращает имя интернет-провайдера (ISP) указанного IP-адреса.

Эта функция доступна только для тех, кто приобрёл коммерческую версию GeoIP ISP. Если такая база отсутствует, выводится предупреждение.

Список параметров

Имя хоста или IP-адрес.

Возвращаемые значения

Возвращает имя ISP в случае успешного выполнения или false , если адрес не найден в базе данных.

Примеры

Пример #1 Пример использования geoip_isp_by_name()

Выведет имя ISP для хоста example.com.

$isp = geoip_isp_by_name ( ‘www.example.com’ );
if ( $isp ) echo ‘Этот IP-адрес управляется провайдером: ‘ . $isp ;
>
?>

Результат выполнения приведённого примера:

Адрес управляется провайдером: ICANN c/o Internet Assigned Numbers Authority

User Contributed Notes

There are no user contributed notes for this page.

  • Функции GeoIP
    • geoip_​asnum_​by_​name
    • geoip_​continent_​code_​by_​name
    • geoip_​country_​code_​by_​name
    • geoip_​country_​code3_​by_​name
    • geoip_​country_​name_​by_​name
    • geoip_​database_​info
    • geoip_​db_​avail
    • geoip_​db_​filename
    • geoip_​db_​get_​all_​info
    • geoip_​domain_​by_​name
    • geoip_​id_​by_​name
    • geoip_​isp_​by_​name
    • geoip_​netspeedcell_​by_​name
    • geoip_​org_​by_​name
    • geoip_​record_​by_​name
    • geoip_​region_​by_​name
    • geoip_​region_​name_​by_​code
    • geoip_​setup_​custom_​directory
    • geoip_​time_​zone_​by_​country_​and_​region
    • Copyright © 2001-2024 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

    PHP: определение IP адреса пользователя

    Задача определения IP адреса пользователя достаточно часто встречается (например, для создания записи в логе), поэтому привожу в упрощенном виде свой метод.

    /** * Получить данные из массива SERVER * @param null $key * @param null $default * @return null */ function get_server( $key = null, $default = null ) < if ( null === $key ) < return $_SERVER; >return ( isset( $_SERVER[ $key ] ) ) ? $_SERVER[ $key ] : $default; > /** * Получить IP адрес клиента * @param boolean $proxy * @return string */ function getClientIp( $proxy = true ) < // Cloudflare. if ( $proxy && get_server( 'HTTP_CF_CONNECTING_IP' ) != null ) < $ip = get_server( 'HTTP_CF_CONNECTING_IP' ); >elseif ( $proxy && get_server('HTTP_CLIENT_IP' ) != null ) < $ip = get_server( 'HTTP_CLIENT_IP' ); >elseif ( $proxy && get_server( 'HTTP_X_FORWARDED_FOR' ) != null ) < $ip = get_server( 'HTTP_X_FORWARDED_FOR' ); >else < $ip = get_server( 'REMOTE_ADDR' ); >return $ip; >

    Не делайте так! Доверяйте лишь заголовку REMOTE_ADDR . Пруфлинк

    Одноклассники
    Автор: Кобзарёв Михаил

    Русский разработчик со стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Joomla, Drupal, Opencart, Laravel, Moonshine. Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги. Веду блог о разработке , нанять меня.

    Как узнать ip пользователя?

    Недавно начал юзать WARP. По идее мой ip должен при этом смениться. Посмотрел по разным сервисам. Часть из них определяет мой настоящий ip без проблем, а часть определяет ip cloudflare. И этот стандартный скрипт также определяет ip cloudflare а как определить реальный ip?

    • Вопрос задан более года назад
    • 416 просмотров

    Комментировать
    Решения вопроса 1

    The original visitor IP address appears in an appended HTTP header called CF-Connecting-IP. By following our webserver instructions, you can log the original visitor IP address at your origin server.

    В PHP этот заголовок искать тут:
    $_SERVER[«HTTP_CF_CONNECTING_IP»]

    Ответ написан более года назад
    newaitix @newaitix Автор вопроса

    623cb7bb1b7cd932997968.jpeg

    Ну во первых нет такого заголовка.

    Во вторых $_SERVER[«HTTP_CF_CONNECTING_IP»] ничего не выдает.

    А блин, я не понял про WARP, подумал просто про сайт за Cloudflare

    Посмотрел по разным сервисам. Часть из них определяет мой настоящий ip без проблем, а часть определяет ip cloudflare

    и что за сервисы определяют ваш настоящий IP?
    newaitix @newaitix Автор вопроса

    galaxy, да это Cloudflare WARP. То есть VPN от Cloudflare.

    newaitix, ну что ж, значит ваш warp пускает в этом случае трафик напрямую или светит ваш адрес через те или иные заголовки. Лишний повод призадуматься.
    Я вот включил нормальный VPN и все ваши сервисы показали выходной адрес VPN.

    Есть вот такие сведения (не разбирался насколько это официально):

    The VPN encrypts all traffic and sends it to CF before it is sent to the intended website instead of sending it directly to the intended website.

    The only difference compared to other VPNs (other than using a newer and faster protocol) is that it will show your real IP address to any website currently using Cloudflare’s main services

    newaitix @newaitix Автор вопроса
    galaxy, хммм. Действительно обычный vpn везде одинаково работает. Понял. Думаю php тут не поможет.

    newaitix, вы можете проверить эту теорию (в моем комментарии выше): уберите ваш сервер с php за cloudflare (это бесплатно, настраивается за 5 минут) и проверьте REMOTE_ADDR и HTTP_CF_CONNECTING_IP

    Ответы на вопрос 1

    FanatPHP

    Чебуратор тега РНР

    Всегда стоял стандартный говнокод, которые ламеры всего мира старательно переписывают друг у друга, не понимая его смысла. Из него надо оставить только
    $ip=$_SERVER[‘REMOTE_ADDR’];
    а всю остальную ересь на помойку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *