Почему я получаю два IP-адреса?

ПРОБЛЕМА

Я работаю с php и api, чтобы использовать IP-адрес пользователя для получения местной валюты. Некоторое время он работал, но внезапно мой интернет-провайдер продолжает давать мне два IP-адреса.

Обычно, если я повторяю $ipaddress, я получаю что-то вроде xxx.xxx.xxx.xxx, поэтому он передает API следующим образом

https://usercountry.com/v1.0/json/xxx.xxx.xxx.xxx?token=<API KEY>

но недавно $ipaddress дает мне два IP-адреса (разные IP-адреса), как этот xxx.xxx.xxx,yyy.yyy.yyy

так что теперь он передает API вот так https://usercountry.com/v1.0/json/xxx.xxx.xxx.xxx,yyy.yyy.yyy.yyy?token=<API KEY>

который возвращает ошибку, потому что UserCountry.com не разрешает двойной IP

Я использую эту проверку каждый раз, когда возникает двойной IP-адрес

if (strlen($ipaddress) > 15){
     $ipaddress = "Double IP";
}

Мой анализ

$ipaddress= xxx.xxx.xxx.xxx,yyy.yyy.yyy.yyy

Когда это происходит, первый IP-адрес (xxx.xxx.xxx.xxx) кажется настоящим (IP-адрес находится в той же стране, что и я), но второй IP-адрес (yyy.yyy.yyy.yyy) находится не в той же стране, что и я,

Что я хочу

Итак, я хочу написать php-код, чтобы отображать только первый IP-адрес (xxx.xxx.xxx.xxx) из xxx.xxx.xxx.xxx,yyy.yyy.yyy.yyy.

Спасибо

Редактировать

Некоторые люди хотят знать, как мне получить IP-адрес $ipaddress.

if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if (isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if (isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if (isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if (isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];

Когда я использую http://ip-api.com/ для проверки своего IP-адреса, я получаю два IP-адреса. xxx.xxx.xxx,yyy.yyy.yyy

$ipaddress не является переменной, которая будет установлена ​​по умолчанию в программе PHP. Невозможно сказать, почему вы получаете какое-либо конкретное значение, по крайней мере, не зная, как вы присваиваете ему значение в первую очередь.
Quentin 25.03.2018 11:42

Я написал функцию, чтобы получить IP-адрес пользователя и передать его в переменную $ipaddress

staynjokede 25.03.2018 11:44

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

Magnus Eriksson 25.03.2018 11:46

Кстати: неоднозначность вашего вопроса уже заставляла людей давать разные ответы, в зависимости от того, отвечают ли они на тему вашего вопроса или на ваше описание. Сделайте это последовательным! Также спросите себя, нужна ли вся предыстория для вашего вопроса.

Ulrich Eckhardt 25.03.2018 11:56

@MagnusEriksson, я только что отредактировал вопрос и добавил его

staynjokede 25.03.2018 11:59

И какой из этих if / elses дает двойные значения?

Quentin 25.03.2018 11:59

@Quentin, я не уверен, но, как я уже сказал, www.ip-api.com также показывает мне два IP-адреса. Я мог бы проверить сейчас, чтобы быть уверенным, но, как я уже сказал, это случается не всегда

staynjokede 25.03.2018 12:11

"Я не уверен. Так что отладьте это и узнайте.

Quentin 25.03.2018 12:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
8
229
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

$ipaddress = explode(',', $ipaddress)[0];


Explode returns an array of strings, each of which is a substring of string formed by splitting it on boundaries…



Но будьте осторожны: Выбор записи массива непосредственно в строке функции не работает до PHP 5.4.

Промышленный термин для этого - array dereferencing.

До PHP 5.4 вам нужно было использовать ответ @muttalebm.

Вопрос в том, что Зачем OP получает два IP-адреса, а не как с ним работать. (Это не мой голос против. Просто говорю).

Magnus Eriksson 25.03.2018 11:47

@MagnusEriksson Почему? Что я хочу говорит иначе.

deEr. 25.03.2018 11:48

Я не говорю, что ваш ответ неверен, но если вы посмотрите на заголовок, он спросит, почему, поскольку это только начало происходить. Прежде чем мы вообще должны дать OP ответ, OP должен показать нам, как они получают IP в первую очередь.

Magnus Eriksson 25.03.2018 11:50

Оно работает!! @MagnusEriksson Я спрашивал, как с ним работать, возможно, это неправильный путь, но я не уверен, что могу что-то сделать, почему мой интернет-провайдер дает мне два IP-адреса

staynjokede 25.03.2018 11:50

@staynjokede - Мы, конечно, не сможем вам с этим помочь, если вы настаиваете на сохранении кода, который дает им секрет.

Quentin 25.03.2018 11:53

@Quentin, я отредактировал это, я добавил, как получить IP-адрес

staynjokede 25.03.2018 11:57
Ответ принят как подходящий

Похоже, что IP-адрес, который вы получаете, использует какой-то прокси. Попробуйте разделить IP-адрес с помощью (,) с помощью метода PHP explode, затем выберите первый.

$ips = explode(',', $ipaddress);
$theOneYouWant = $ips[0];

Другие вопросы по теме