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

Как получить ip php

  • автор:

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

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

$_SERVER[‘HTTP_CLIENT_IP’] и $_SERVER[‘HTTP_X_FORWARDED_FOR’] – они как раз содержат реальные адреса если клиент зашел через прокси-сервер. Адресов может быть несколько, разделенны запятыми.

Лучшее решение – получать и хранить все полученные адреса:

function get_ip_list() < $list = array(); if (!empty($_SERVER['HTTP_CLIENT_IP'])) < $ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $list = array_merge($list, $ip); >elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) < $ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $list = array_merge($list, $ip); >elseif (!empty($_SERVER['REMOTE_ADDR'])) < $list[] = $_SERVER['REMOTE_ADDR']; >$list = array_unique($list); return implode(',', $list); >

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

ну я вот так при входе на сайт сохраняю IP адрес пользователя, но тут у меня сохраняет IP адрес хостинга в которой мой сайт лежит. Что не так? Как взять IP пользователя? У меня только один ip сохраняет, и это ip хостинга

  • Вопрос задан более трёх лет назад
  • 814 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 3
Софт для автоматизации

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

Ответ написан более трёх лет назад
Нравится 1 3 комментария

FanatPHP

сотри этот ужас
FanatPHP, предложи тогда свой ужас)

FanatPHP

на надо торговаться. просто сотри

Обычно, подобные вашему глюки возникают при использовании ELB (Elastic Load Balancer) хостером. Или когда сайт работает за реверс-прокси сервером (например, CloudFlare или хостеровский nginx).
Там в $_SERVER[‘HTTP_X_FORWARDED_FOR’] прилетает строка из нескольких IP:

"223.190.123.220, 66.102.6.83" "2402:3a80:10d3:e19f:e7e1:8c35:fb4a:b49c, 66.102.6.89"

И, похоже, Yii::$app->request->userIP не знает как с ними поступать (в строке по сути невалидный IP, и filter_var($ip, FILTER_VALIDATE_IP) на нём обламывается).

Как правильно определять IP посетителя в таких случаях (и какие ещё грабли вас поджидают), отлично изложено на Хабре: REMOTE_ADDR vs HTTP_X_FORWARDED_FOR.
Вам надо узнать в какой переменной хостер присылает реальный IP посетителя, если он тупо добавляет её в $_SERVER[‘HTTP_X_FORWARDED_FOR’] — надо хотя бы узнать в начало или в конец. И выцеплять её оттуда.

PS: Я с Yii не работал, но скорее всего его можно «настроить» под вашу конкретику, там наверняка это предусмотрено. Посмотрите echo ‘

'.print_r($_SERVER, true).'

‘; что и под какими именами прилетает, может ваш хостер использует нестандартные заголовки для передачи реального IP посетителя.

PPS: HTTP_X_FORWARDED_FOR в принципе нельзя использовать как IP-адрес. Если пользователь работает через свой прокси (или публичные Google-прокси, прокси Opera-mini и тп) — там бывает 3 IP-адреса и более, включая IPv6.

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

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

$ip=$_SERVER['REMOTE_ADDR']; echo "IP Address= $ip";

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

Напишите сценарий PHP для получения IP-адреса клиента.

Пример
 //является ли ip от прокси elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) < $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR']; >//является ли ip с удаленного адреса else < $ip_address = $_SERVER['REMOTE_ADDR']; >echo $ip_address; ?> 

IP-адрес: адрес Интернет-протокола (IP-адрес) — это числовая метка, присваиваемая каждому устройству, подключенному к компьютерной сети, которое использует Интернет-протокол для связи. IP-адрес выполняет две основные функции: идентификацию хоста или сетевого интерфейса и адресацию местоположения.

Интернет-протокол версии 4 (IPv4) определяет IP-адрес как 32-битное число. Однако из-за роста Интернета и истощения доступных адресов IPv4 в 1995 году была разработана новая версия IP (IPv6), использующая 128 бит для IP-адреса, и стандартизована в декабре 1998 года. В июле 2017 года было опубликовано окончательное определение протокола. Развертывание IPv6 продолжается с середины 2000-х годов.

IP-адреса обычно записываются и отображаются в удобочитаемых обозначениях, например 172.16.254.2 в IPv4 и 2001: db8: 0: 1234: 0: 567: 8: 1 в IPv6. Размер префикса маршрутизации адреса обозначается в нотации CIDR путем добавления к адресу суффикса числа значащих битов, например 192.168.1.16/24, что эквивалентно исторически используемой маске подсети 255.255.255.0.

Пространство IP-адресов управляется в глобальном масштабе Управлением по присвоению номеров Интернета (IANA) и пятью региональными Интернет-реестрами. На определенных территориях они несут ответственность за назначение конечным пользователям и местным реестрам Интернета, например поставщикам услуг Интернета. Адреса IPv4 были распределены IANA среди RIR блоками примерно по 16,8 миллионов адресов в каждом. Каждый интернет-провайдер или администратор частной сети назначает IP-адрес каждому устройству, подключенному к его сети.

Loop Flow

Комментарии

пожелания к комментариям…

  • Приветствуются комментарии, соответствующие теме урока: вопросы, ответы, предложения.
  • Одну строчку кода оборачивайте в тег , несколько строчек кода — в теги
    . ваш код.

    .

  • Допускаются ссылки на онлайн-песочницы (codepen, plnkr, JSBin и др.).

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

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