Вы не зашли.
$_SERVER['HTTP_X_FORWARDED_FOR'] использую для определения реального IP-адреса, при условии что USER_AGENT Опера Мини.
И вот что получается - временами в переменной X_FORWARDED_FOR передаются айпи в таком виде:
123.123.123.123,
или
123.123.123.123.
И вот что нужно чтобы определить верный айпи без ., Но следует учесть что может и что-то другое еще может быть в этих значениях. Эти два примера, это то что мне попало только.
Вот мой вариант решения задачи:
если ЮА опера мини
Код:
$ips = split("\.", $_SERVER['HTTP_X_FORWARDED_FOR']); |
$ip = $ips[0].'.'.$ips[1].'.'.$ips[2].'.'.$ips[3]; |
Может у кого есть другие предположения на этот счет?
Добавлено спустя 2 минуты 56 секунд: Сам себя поправлю.
Думаю лучше будет заменить split() на explode()
Отредактировано WebGraf (2009.12.27 00:12)
да, конечно. split - это регулярка из состава ereg, следовательно deprecated.
На сколько я помню, там еще дальше могут быть IP, после запятой, если используются прокси и сервеам оперы передается X-FORWARDED-FOR. А вообщке, вполне нормальное решение разбивка по explode, ИМХО.
Ну значит пусть так и будет
Код:
$ips = explode('.', $_SERVER['HTTP_X_FORWARDED_FOR']); |
$ip = $ips[0].'.'.$ips[1].'.'.$ips[2].'.'.$ips[3]; |
X_FORWARDED_FOR легко подменить, юзай remote_addr
Читай выше когда я его использую
Для остальных случаев remote_addr
Кажется я сам себя обманываю
188.115.194.1,12.12.
код выше разобьет на 5 частей. ну допустим что я использую 4 из них для построения айпи
последняя (4) часть будет 1,12
думаю стоит о интвал подумать
Отредактировано WebGraf (2009.12.27 17:05)
#7.
Gemor
Гость
2009.12.27 20:08
ну да, либо еще sprintf
Код:
$_SERVER['HTTP_X_FORWARDED_FOR'] = '188.115.194.1,12.12.'; |
$ips = explode('.', $_SERVER['HTTP_X_FORWARDED_FOR']); |
echo $ips[0] . '.' . $ips[1] . '.' . $ips[2] . '.' . sprintf('%s', $ips[3]); |
#8.
AND
Off
(11)
Участник
2009.12.27 22:10
Gemor ошибся, в sprintf нужен спецификатор типа %d (%u)
Можно еще так:
Код:
preg_match('/^[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}/', $_SERVER['HTTP_X_FORWARDED_FOR'], $ip); |
echo $ip[0]; |
preg_match('/^[0-255]\.[0-255]\.[0-255]\.[0-255]/', $_SERVER['HTTP_X_FORWARDED_FOR'], $ip);
echo $ip[0];
А так правильно будет?
на хую вас вертів
И всетаки вариант с интвал самый быстрый.
Вариант с sprintf('%d', $ips[3]) также хорош
А вот preg_match - это перебор. К чему эта излишняя нагрузка?
Добавлено спустя 6 минут 35 секунд: Ну и сразу по теме еще 1 вопрос.
Какой сервер использовать лучше всего для проверки айпи.
На данный момент использую whois.lacnic.net