Меню

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

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

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

На практике часто возникает необходимость узнать 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 адрес посетителя в данном случае, нужно воспользоваться другим способом.

Как в 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.

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

Источник статьи: http://cccp-blog.com/koding/php-uznat-ip-adres

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

В этой статье рассмотрим, как в PHP можно узнать IP клиента и сервера, а также разберём как зная IP клиента определить его страну и город.

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

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

Но, если клиент использует прокси-сервер, то значение $_SERVER[‘REMOTE_ADDR’] будет содержать IP последнего прокси-сервера, через который клиент попал на сайт.

В этом случае, чтобы узнать IP посетителя можно попробовать использовать $_SERVER[‘HTTP_CLIENT_IP’] и $_SERVER[‘HTTP_X_FORWARDED_FOR’] . HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR – это заголовки, содержащие IP адрес пользователя. Данные заголовки устанавливает прокси-сервер. Обычно прокси-сервер устанавливает один из них. Данным в этих заголовках можно доверять, только если прокси-сервер надёжный. В противном случае, им доверять не стоит, т.к. их можно очень просто подделать. В этом случае лучше просто использовать $_SERVER[‘REMOTE_ADDR’] или сохранять в базу как $_SERVER[‘REMOTE_ADDR’] , так и заголовок, устанавливаемый прокси-сервером.

Определение страны по ip с помощью Sypex Geo

Основные шаги по созданию php скрипта, с помощью которого можно будет определять страну по ip:

1. Скачаем Sypex Geo для PHP и базу данных стран. Sypex Geo распространяется по лицензии BSD, т.е. является абсолютно бесплатным.

2. Распакуем архивы и загрузим на сервер файлы «SxGeo.php» и «SxGeo.dat». В качестве примера, создадим на сервере папку SxGeo и загрузим эти файлы в неё.

3. Создадим свой скрипт, например, «get_country_code.php».

4. Вставим в этот файл следующий код:

5. Включим файл «get_country_code.php» в другие скрипты, в которых нужно реализовать выполнение кода в зависимости от принадлежности ip посетителя к той или иной стране.

Определение города по ip с помощью Sypex Geo

Для определения города, потребуется загрузить архив с базой данных городов для Sypex Geo, распаковать его и загрузить на сервер.

Скрипт в этом случае будет следующий:

Для автоматического обновления баз можно воспользоваться этим архивом. В этом архиве находится php скрипт. Этот скрипт необходимо настроить, т.е. указать в нём URL для скачивания базы и пути к файлам на сервере. После этого загрузить его на сервер и настроить его запуск по расписанию с помощью cron.

Определение страны и города по ip через сервис через сервис ipstack

Рассмотрим ещё один вариант определения в php местоположения по ip посетителя, но уже не через Sypex Geo, а с помощью сервиса ipstack.

Сервис ipstack имеет бесплатный план, который позволяет обрабатывать до 10000 запросов в месяц.

Для получения бесплатного плана нажимаем на кнопку «GET FREE API KEY» и переходим на страницу, на которой нужно заполнить регистрационную карточку.

После регистрации, на личной странице ipstack вам будет назначен «API Access Key», который нужно скопировать. Он нам потребуется при создании php скрипта.

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

Узнать IP адрес сервера в PHP можно с помощью следующей инструкции:

Пример реализации определения локации в CMS MODX

В качестве примере рассмотрим, как в CMS MODX Revolution можно очень просто без сторонних сервисов осуществить определение страны посетителя. Разработаем решение на базе Sypex Geo.

1. Для этого сначала нужно загрузить Sypex Geo в проект:

Файл «SxGeo.php» – это основной скрипт, а «SxGeo.dat» – это база стран. Этих двух файлов достаточно для определения страны пользователя по его ip. Дополнительно в каталоге SxGeo ещё расположен файл «SxGeoCity.dat», данный файл в текущей реализации не нужен, он может потребовать, если в проекте потребуется определять не только страну пользователя, а ещё его регион и город.

2. Создадим сниппет, например «get_location.php». В качестве примера организуем это с помощью файлов. Для этого нужно чтобы был установлен pdoTools и в настройках включена опция «Использовать Fenom на страницах».

Код сниппета «get_location.php»:

Поместим файл «get_location.php» в каталог /core/elements/snippets/ .

Данный сниппет будет определять страну и помещать его код в плейсхолдер countrycode .

3. После этого в нужных шаблонах поместим код вызова сниппета и сохранение значение плейсхолдера countrycode в переменную $country_code .

Всё теперь чтобы написать логику достаточно использовать эту переменную.

Источник статьи: http://itchief.ru/php/get-ip-and-country

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

Один из самых частых вопросов, которые мне довелось слышать — это «как узнать IP-адрес посетителя через PHP«. Несмотря на всю простоту этой задачи, люди, тем не менее, это спрашивают. Как правило, это новички, которым PHP изучать не нужно, а нужен лишь какой-то скрипт, который будет выполнять определённую их задачу, в частности, узнавать IP-адрес посетителя. И в этой статье я этот код и дам.

Чтобы узнать IP-адрес посетителя сайта нужно написать всего лишь одну строку в скрипте:

Если Вы запустите этот скрипт, то узнаете свой IP-адрес. Как видите, всё просто! А в одной из следующих статей я расскажу, как узнать по IP-адресу, из какой страны пришёл человек на сайт.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 10 ):

    Да так ты узнаешь IP НО как быть если у человека Динамический IP Ему просто стоит взять отключиться от нета а потом заново подключиться И у него уже будет новый IP Что посоветуешь в данной ситуации ?

    Вопрос в следующем как мне заблокировать на сайте одного плохого человека я решил сделать функцию которая будет блокировать человека с конкретным ip. Получилось но у него ip динамический и постоянно изменяется Ка быть? Есть предположения?

    Самый простой вариант — это блокировка по cookie. По IP блокировать бесполезно по причинам описанным Вами же. Так же можно блокировать всю подсеть, хотя не всегда динамический IP в одной подсети, плюс пострадают нормальные люди из его подсети.

    Спасибо хорошая идея Попробую может что-то выйдет

    Админ у меня на локальном ip выводит вот это ::1 когда пишу echo $_SERVER[«REMOTE_ADDR»];

    а на настояшем сервере будет выводится IP.

    Михаил, спасибо, шикарная статья! Все по делу и понятно . По определению IP сейчас уже много решений для определения. появились такие сервисы, позволяющие узнавать не только IP, но и телефонные номера всех посетителей сайта. используют в маркетинге для обзвонов. говорят, что легально — патенты, разрешения, все дела. как они это делают? пример: https://vse-klienty.ru

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2022 Русаков Михаил Юрьевич. Все права защищены.

    Источник статьи: http://myrusakov.ru/php-ip-user.html

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

    Сегодня поговорим о том, как определить IP адрес пользователя в PHP, как его проверить с помощью регулярных выражений, как его конвертировать в число и обратно, как его хранить в базе данных MySQL, а так же о том, какие ip адреса заранее зарезервированы..

    Вступление

    IP адрес — это сокращение от Internet Protocol Address. Это числовой идентификатор компьютера или устройства в локальной сети или сети интернет. Бывают двух версий:

    • IPv4 (32 бита), пример: 192.168.0.1
    • IPv6 (128 бит), пример: 0000:0000:0000:0000:0000:0000:0000:1 или ::1

    В этой статье мы поговорим про ip-адреса версии IPv4, т.е. об ip адресах из диапазона: 0.0.0.0 — 255.255.255.255

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

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

    В результате выполнения скрипта, вы получите ip адрес посетителя.

    Какой адрес будет показан при входе с моего ПК, на веб-сервер на моем ПК?

    В случае, если Вы установили веб-сервер на свой ПК (например, Openserver) и открываете страницу опять же со своего ПК, вы увидите адрес 127.0.0.1. Это нормально, при переносе на нормальный хостинг, будет показан Ваш внешний IP.

    Что будет при попытке получить ip-адрес выполнив скрипт из консоли?

    Если Вы попробуете запустить такой скрипт из консоли, например создав файл ip.php с содержимым:

    и затем в консоли выполните:

    то вы получите ошибку, в которой будет написано, что PHP не может найти значение по указанному ключу

    Дело в том, что эти переменные устанавливает веб-сервер и при запуске «напрямую» они не будут установлены

    Как проверить откуда запускается скрипт из консоли или через веб-сервер?

    Проверить откуда запускается скрипт можно с помощью функции php_sapi_name()

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

    Если у Вас возникнет вопрос, почему просто не проверить через isset, отвечаю: переменная REMOTE_ADDR может быть установлена с помощью переменных окружения, тогда проверка isset пройдет, но значение может не соответствовать действительности. Да, можно проигнорировать проверку с помощью php_sapi_name(), но вы должны отдавать себе отчет в том, что вы делаете и почему именно так.

    Как проверить IP адрес с помощью регулярного выражения?

    Проверить IP адрес с помощью регулярного выражения можно простой проверкой:

    Здесь проверяется, что в $ip содержится такая строка:

    Более точной будет проверка ip-адреса вот таким выражением:

    Здесь проверяется, что в $ip содержится такая строка:

    Как определить IP адрес посетителя, находящегося за прокси сервером?

    Достоверно на 100% определить нельзя. Можно попытать удачи с переменными HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR, но надо помнить что все переменные массива $_SERVER начинающиеся на HTTP_* это заголовки запроса, которые могут быть подделаны, переопределены, полностью отсутствовать, иметь не верный формат или содержать какую-нибудь гадость, например, sql-инъекцию.

    В случае, если Вы решите использовать именно такой код, я рекомендую проверять его с помощью регулярки описанной выше, чтобы отфильтровать не валидные ip и гадости. Вот так:

    Как хранить IP адрес в базе данных MySQL?

    Лично я предпочитаю хранить IP адрес в MySQL в поле типа VARCHAR(15), по длине самого длинного IPv4 адреса = 255.255.255.255

    Другой способ, это привести IP адрес в к типу UNSIGNED INT. Это позволяет экономить память: 4 байта у UNSIGNED INT против 15 у CHAR.

    Преобразовать IPv4 адрес к типу INT в PHP можно так

    Тоже самое можно сделать и на стороне MySQL, для этого надо использовать функции INET_ATON() и INET_NTOA()

    Запомнить эти функции достаточно просто:
    ATON = Address TO Numaber
    NTOA = Number TO Adress

    Выбор, что использовать для хранения VARCHAR или INT стоит за проектировщиком БД и удобством использования в будущем.

    Какие IP адреса являются предопределенными?

    Для локальных сетей предопределены такие диапазоны IP адресов:

    • 10.0.0.0/8 или 10.0.0.0 — 10.255.255.255
    • 172.16.0.0/12 или 172.16.0.0 — 172.31.255.255
    • 192.168.0.0/16 или 192.168.0.0 — 192.168.255.255

    Для коммуникаций внутри хоста (между программами запущенными на вашем ПК) используется диапазон ip-адресов: 127.0.0.0/8 или 127.0.0.0 — 127.255.255.255 .

    Блок с 169.254.1.0 по 169.254.254.255 (подсеть 169.254.0.0/16 за исключением подсетей 169.254.0.0/24 и 169.254.255.0/24) —
    используется для автоматической настройки сетевого интерфейса в случае отсутствия DHCP

    Источник статьи: http://it-rem.phpdev.one/php-kak-opredelit-ip-adres-polzovatelya.html

    gethostbyaddr

    gethostbyaddr — Get the Internet host name corresponding to a given IP address

    Description

    Returns the host name of the Internet host specified by ip .

    Parameters

    Return Values

    Returns the host name on success, the unmodified ip on failure, or false on malformed input.

    Examples

    Example #1 A simple gethostbyaddr() example

    = gethostbyaddr ( $_SERVER [ ‘REMOTE_ADDR’ ]);

    See Also

    • gethostbyname() — Get the IPv4 address corresponding to a given Internet host name
    • gethostbynamel() — Get a list of IPv4 addresses corresponding to a given Internet host name

    User Contributed Notes 35 notes

    Sometimes when using $_SERVER[‘HTTP_X_FORWARDED_FOR’] OR $_SERVER[‘REMOTE_ADDR’] more than 1 IP address is returned, for example ‘155.240.132.261, 196.250.25.120’. When this string is passed as an argument for gethostbyaddr() PHP gives the following error: Warning: Address is not a valid IPv4 or IPv6 address in.

    To work around this I use the following code to extract the first IP address from the string and discard the rest. (If you wish to use the other IPs they will be in the other elements of the $ips array).

    if (strstr($remoteIP, ‘, ‘)) <
    $ips = explode(‘, ‘, $remoteIP);
    $remoteIP = $ips[0];
    >

    The problem of broken DNS servers was causing me a problem because i had a page for user statistics that required around 20 reverse dns lookups to be done, and even as many as 5/6 of them being broken was causing a huge delay in loading the page. so i wrote a function that uses a UDP socket to talk directly to the DNS server (instead of going via the normal gethostbyaddr function) this let me set a timeout.

    The only requirement is that your DNS server must be able to do recursive lookups, it wont go to other DNS servers if its told to. and of course you need to know your DNS servers IP address 🙂

    =0; $x—)
    <
    // needs a byte to indicate the length of each segment of the request
    switch (strlen($bits[$x]))
    <
    case 1: // 1 byte long segment
    $data .= «\1»; break;
    case 2: // 2 byte long segment
    $data .= «\2»; break;
    case 3: // 3 byte long segment
    $data .= «\3»; break;
    default: // segment is too big, invalid IP
    return «INVALID»;
    >
    // and the segment itself
    $data .= $bits[$x];
    >
    // and the final bit of the request
    $data .= «\7in-addr\4arpa\0\0\x0C\0\1»;
    // create UDP socket
    $handle = @fsockopen(«udp://$dns», 53);
    // send our request (and store request size so we can cheat later)
    $requestsize=@fwrite($handle, $data);

    @socket_set_timeout($handle, $timeout — $timeout%1000, $timeout%1000);
    // hope we get a reply
    $response = @fread($handle, 1000);
    @fclose($handle);
    if ($response == «»)
    return $ip;
    // find the response type
    $type = @unpack(«s», substr($response, $requestsize+2));
    if ($type[1] == 0x0C00) // answer
    <
    // set up our variables
    $host=»»;
    $len = 0;
    // set our pointer at the beginning of the hostname
    // uses the request size from earlier rather than work it out
    $position=$requestsize+12;
    // reconstruct hostname
    do
    <
    // get segment size
    $len = unpack(«c», substr($response, $position));
    // null terminated string, so length 0 = finished
    if ($len[1] == 0)
    // return the hostname, without the trailing .
    return substr($host, 0, strlen($host) -1);
    // add segment to our host
    $host .= substr($response, $position+1, $len[1]) . «.»;
    // move pointer on to the next segment
    $position += $len[1] + 1;
    >
    while ($len != 0);
    // error — return the hostname we constructed (without the . on the end)
    return $ip;
    >
    return $ip;
    >
    ?>

    This could be expanded quite a bit and improved but it works and i’ve seen quite a few people trying various methods to achieve something like this so i decided to post it here. on most servers it should also be more efficient than other methods such as calling nslookup because it doesn’t need to run external programs

    Note: I’m more a C person than a PHP person, so just ignore it if anything hasn’t been done the *recomended* way 🙂

    Источник статьи: http://www.php.net/manual/en/function.gethostbyaddr.php

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

    Если вы пишите свой модуль статистики, боретесь с подозрительной активностью, например, через блокировку доступа к вашему ресурсу или решаете другую подобную задачу, IP-адрес – это тот параметр, за который можно «зацепиться», ведь он позволяет в какой-то степени отличить одного посетителя сайта от другого.

    За свою скромную карьеру программиста я сталкивался с этим вопросом много раз, видел разные реализации описанного и на личном опыте, открыл для себя некоторые моменты, о которых сегодня расскажу в этом посте.

    Итак, простое получение IP-адреса пользователя в PHP осуществляется через суперглобальный массив $_SERVER с ключом REMOTE_ADDR:

    Вполне рабочий вариант, но в случае, когда человек использует прокси, REMOTE_ADDR вернет нам не его (человека) реальный IP-адрес, а конечный этого прокси-сервера, через который он попал на сайт. Чтобы учесть это, воспользуйтесь следующей функцией:

    Это (в общем) итоговый вариант, а теперь к нюансам.

    1. Иногда нам может вернуться не один IP-адрес, а список из нескольких. Можете оставить как есть, это просто уточнение для вас, а можете получить один, например, последний:

    В случае с функцией выше эту конструкцию можно написать вместо строчки с return:

    2. По-хорошему, особенно если вы работаете с базой данных, полученный результат лучше фильтровать (об этом ниже).

    3. Если ваш сайт подключен к Cloudflare, то стоит проверять IP, который он возвращает:

    Выше представленная функция тогда будет иметь следующий вид:

    Когда я писал свой модуль статистики, именно этот момент «всплыл» у некоторых пользователей, которые начали его использовать.

    Фильтрация (валидация) IP-адресов в PHP

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

    В PHP на такой случай (фильтрация IP) существует функция filter_var.

    Сама по себе функция умеет фильтровать не только IP-адреса. С ней мы уже сталкивались с вами при написании формы обратной связи (там мы с помощью неё фильтровали e-mail).

    Простой пример использования:

    В ранее написанной нами функции её можно использовать вместо строчки с return:

    Это общий вариант использования функции, который проверяет корректность IP-адреса (v4 или v6). Дополнительно можно использовать флаги:

    1. FILTER_FLAG_IPV4 – IP-адрес формата IPv4;
    2. FILTER_FLAG_IPV6 – IP-адрес формата IPv6;
    3. FILTER_FLAG_NO_PRIV_RANGE – IP-адрес не входит в диапазон частных адресов;
    4. FILTER_FLAG_NO_RES_RANGE – IP-адрес не входит в диапазон зарезервированных адресов.

    Флаги можно совмещать с помощью побитового оператора | (операция ИЛИ):

    Таким образом, мы проверяем, что IP-адрес имеет формат IPv4 и он не входит в диапазон частных адресов.

    А вот FILTER_FLAG_IPV4 и FILTER_FLAG_IPV6 между собой совмещать не стоит, поскольку функция это проверяет по умолчанию.

    Источник статьи: http://www.pandoge.com/post/753

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

    Сегодня поговорим о том, как определить IP адрес пользователя в PHP, как его проверить с помощью регулярных выражений, как его конвертировать в число и обратно, как его хранить в базе данных MySQL, а так же о том, какие ip адреса заранее зарезервированы..

    Вступление

    IP адрес — это сокращение от Internet Protocol Address. Это числовой идентификатор компьютера или устройства в локальной сети или сети интернет. Бывают двух версий:

    • IPv4 (32 бита), пример: 192.168.0.1
    • IPv6 (128 бит), пример: 0000:0000:0000:0000:0000:0000:0000:1 или ::1

    В этой статье мы поговорим про ip-адреса версии IPv4, т.е. об ip адресах из диапазона: 0.0.0.0 — 255.255.255.255

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

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

    В результате выполнения скрипта, вы получите ip адрес посетителя.

    Какой адрес будет показан при входе с моего ПК, на веб-сервер на моем ПК?

    В случае, если Вы установили веб-сервер на свой ПК (например, Openserver) и открываете страницу опять же со своего ПК, вы увидите адрес 127.0.0.1. Это нормально, при переносе на нормальный хостинг, будет показан Ваш внешний IP.

    Что будет при попытке получить ip-адрес выполнив скрипт из консоли?

    Если Вы попробуете запустить такой скрипт из консоли, например создав файл ip.php с содержимым:

    и затем в консоли выполните:

    то вы получите ошибку, в которой будет написано, что PHP не может найти значение по указанному ключу

    Дело в том, что эти переменные устанавливает веб-сервер и при запуске «напрямую» они не будут установлены

    Как проверить откуда запускается скрипт из консоли или через веб-сервер?

    Проверить откуда запускается скрипт можно с помощью функции php_sapi_name()

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

    Если у Вас возникнет вопрос, почему просто не проверить через isset, отвечаю: переменная REMOTE_ADDR может быть установлена с помощью переменных окружения, тогда проверка isset пройдет, но значение может не соответствовать действительности. Да, можно проигнорировать проверку с помощью php_sapi_name(), но вы должны отдавать себе отчет в том, что вы делаете и почему именно так.

    Как проверить IP адрес с помощью регулярного выражения?

    Проверить IP адрес с помощью регулярного выражения можно простой проверкой:

    Здесь проверяется, что в $ip содержится такая строка:

    Более точной будет проверка ip-адреса вот таким выражением:

    Здесь проверяется, что в $ip содержится такая строка:

    Как определить IP адрес посетителя, находящегося за прокси сервером?

    Достоверно на 100% определить нельзя. Можно попытать удачи с переменными HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR, но надо помнить что все переменные массива $_SERVER начинающиеся на HTTP_* это заголовки запроса, которые могут быть подделаны, переопределены, полностью отсутствовать, иметь не верный формат или содержать какую-нибудь гадость, например, sql-инъекцию.

    В случае, если Вы решите использовать именно такой код, я рекомендую проверять его с помощью регулярки описанной выше, чтобы отфильтровать не валидные ip и гадости. Вот так:

    Как хранить IP адрес в базе данных MySQL?

    Лично я предпочитаю хранить IP адрес в MySQL в поле типа VARCHAR(15), по длине самого длинного IPv4 адреса = 255.255.255.255

    Другой способ, это привести IP адрес в к типу UNSIGNED INT. Это позволяет экономить память: 4 байта у UNSIGNED INT против 15 у CHAR.

    Преобразовать IPv4 адрес к типу INT в PHP можно так

    Тоже самое можно сделать и на стороне MySQL, для этого надо использовать функции INET_ATON() и INET_NTOA()

    Запомнить эти функции достаточно просто:
    ATON = Address TO Numaber
    NTOA = Number TO Adress

    Выбор, что использовать для хранения VARCHAR или INT стоит за проектировщиком БД и удобством использования в будущем.

    Какие IP адреса являются предопределенными?

    Для локальных сетей предопределены такие диапазоны IP адресов:

    • 10.0.0.0/8 или 10.0.0.0 — 10.255.255.255
    • 172.16.0.0/12 или 172.16.0.0 — 172.31.255.255
    • 192.168.0.0/16 или 192.168.0.0 — 192.168.255.255

    Для коммуникаций внутри хоста (между программами запущенными на вашем ПК) используется диапазон ip-адресов: 127.0.0.0/8 или 127.0.0.0 — 127.255.255.255 .

    Блок с 169.254.1.0 по 169.254.254.255 (подсеть 169.254.0.0/16 за исключением подсетей 169.254.0.0/24 и 169.254.255.0/24) —
    используется для автоматической настройки сетевого интерфейса в случае отсутствия DHCP

    Источник статьи: http://www.it-rem.ru/php-kak-opredelit-ip-adres-polzovatelya.html

    Как определить ip адрес посетителя сайта в PHP

    PHP не имеет каких то специальных средств для определения ip адреса. Эту информацию ему поставляет веб-сервер в виде переменных окружения.

    Используя команду phpinfo(), можно получить список переменных окружения, настроек сервера, подключенных библиотек. Нас интересует удаленный адрес посетителя. В этой таблице он идет под именем «REMOTE_ADDR».

    Вот пример, с моего локального тестового сервера:

    Эта информация попадает в глобальную переменную-массив $_SERVER. Т.е. определить адрес пользователя очень просто —

    В некоторых случаях переменные окружения могут быть подменены. К примеру, когда трафик проходит через прокси, обычно в качестве REMORE_ADDR выступает уже адрес прокси-сервера. Но программное обеспечение сохраняет адрес клиента в заголовке HTTP запроса. В переменные окружения этот адрес может попасть под разными именами.

    Пример функции, извлекающей ip адрес, используя несколько переменных окружения.

    В данном примере перебираются варианты названий переменной окружения. Сначала анализируется значение из $_SERVER[‘HTTP_CLIENT_IP’], потом проверяется в ‘HTTP_X_FORWARDED_FOR’ и в заключении в ‘REMOTE_ADDR’.

    Доверять значению, передаваемому в переменных ‘HTTP…’ нельзя, так как эти значения передаются через заголовки HTTP запроса и могут содержать произвольную информацию. Их можно сохранить в качестве дополнения к значению ‘REMOTE_ADDR’.

    Этот набор информации уже можно протоколировать, сохранять и использовать для анализа. Можно добавить проверку информации в переменных ‘HTTP..’ на соответствие формату, чтобы не сохранять то, что вам не нужно.

    Данная запись опубликована в 13.11.2015 17:31 и размещена в PHP. Вы можете перейти в конец страницы и оставить ваш комментарий.

    Мало букафф? Читайте есчо !

    Поиск и замена терминов. Пример реализации.

    Задача поиска и замены каких либо терминов в тексте кажется на первый взгляд довольно простой в PHP. Есть очень мощные инструменты вроде str_replace, а также поиск и замена с помощью регулярных выражений, например, preg_replace и preg_replace_callback. .

    Как в PHP сделать буквы заглавными?

    PHP обладает целым арсеналом работы со строками. Сделать буквы заглавными или наоборот перевести в строчные — нет ничего проще. Базовый набор функций для работы со строками содержит такие функции как: string strtolower ( string $string ); — .

    Комментарии к «Как определить ip адрес посетителя сайта в PHP»

    Понравилась статья? Есть вопросы? — пишите в комментариях.

    Много комментариев в “Как определить ip адрес посетителя сайта в PHP”

    Скажите, пожалуйста, как вывести ip-адрес на сайте правильно.
    Вывожу так:

    Выводятся два одинаковых ip-адреса. Если вывести так:

    То выводится соответственно:

    Array
    (
    [addr] => 00.00.0.00
    [forwarded_addr] => 00.00.0.00
    )

    php foreach($ip as $ip_info):
    $ip_info
    php endforeach;

    В предыдущем сообщении вырезало, поэтому знаки лишние убрал сейчас.

    Смысл статьи в том, что есть несколько переменных окружения, где может содержаться информация об ip пользователя. Вы можете принять какую то систему приоритетов, например, как это сделано в функции getClientIp(), а можете получить набор адресов, как в функции getClientIpInfo().

    Обычно, достаточно запросить $ip_address = $_SERVER[‘REMOTE_ADDR’], но если сайт находится за прокси сервером, то надо делать более сложные манипуляции.

    Пример получения ip_address из CMS Drupal:

    function ip_address() <
    static $ip_address = NULL;

    Источник статьи: http://shra.ru/2015/11/kak-opredelit-ip-adres-posetitelya-sajjta-v-php/

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

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