ПРОБЛЕМА
Я работаю с 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
Я написал функцию, чтобы получить IP-адрес пользователя и передать его в переменную $ipaddress
... тогда вы можете показать нам эту функцию? Мы здесь не для того, чтобы гадать.
Кстати: неоднозначность вашего вопроса уже заставляла людей давать разные ответы, в зависимости от того, отвечают ли они на тему вашего вопроса или на ваше описание. Сделайте это последовательным! Также спросите себя, нужна ли вся предыстория для вашего вопроса.
@MagnusEriksson, я только что отредактировал вопрос и добавил его
И какой из этих if / elses дает двойные значения?
@Quentin, я не уверен, но, как я уже сказал, www.ip-api.com также показывает мне два IP-адреса. Я мог бы проверить сейчас, чтобы быть уверенным, но, как я уже сказал, это случается не всегда
"Я не уверен. Так что отладьте это и узнайте.






$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-адреса, а не как с ним работать. (Это не мой голос против. Просто говорю).
@MagnusEriksson Почему? Что я хочу говорит иначе.
Я не говорю, что ваш ответ неверен, но если вы посмотрите на заголовок, он спросит, почему, поскольку это только начало происходить. Прежде чем мы вообще должны дать OP ответ, OP должен показать нам, как они получают IP в первую очередь.
Оно работает!! @MagnusEriksson Я спрашивал, как с ним работать, возможно, это неправильный путь, но я не уверен, что могу что-то сделать, почему мой интернет-провайдер дает мне два IP-адреса
@staynjokede - Мы, конечно, не сможем вам с этим помочь, если вы настаиваете на сохранении кода, который дает им секрет.
@Quentin, я отредактировал это, я добавил, как получить IP-адрес
Похоже, что IP-адрес, который вы получаете, использует какой-то прокси.
Попробуйте разделить IP-адрес с помощью (,) с помощью метода PHP explode, затем выберите первый.
$ips = explode(',', $ipaddress);
$theOneYouWant = $ips[0];
$ipaddressне является переменной, которая будет установлена по умолчанию в программе PHP. Невозможно сказать, почему вы получаете какое-либо конкретное значение, по крайней мере, не зная, как вы присваиваете ему значение в первую очередь.