Исправление определения ip у оперы мини и ip 127.255.255.255 у гостей

1.11K
.
Спасибо, вроде работает везде кроме гостевой, но почему?
.
В стельку трезвый
для int положительный max = 2147483648
Хоть ты туда пихай 3522881442, внутри быдет всеравно 2147483647.
$a=long2ip(2147483647); 
echo "$a";//127.255.255.255 
$b=ip2long("127.255.255.255"); 
echo "$b";//2147483647
.
╭∩╮ (`-`) ╭∩╮
Максим (12.04.2010/14:45)
В связи с возникновением у многих загадочного ip 127.255.255.255 у гостей, выкладываю исправлялку. ))Такой ip возникает не на всех хостингах. Связано это с тем что тип int не может вместить число посл
А для чего там в апдейтере BIGINT(11)
Обычный INT тоже по умолчанию имеет 11
.
В стельку трезвый
AlkatraZ (15.04.2010/15:08)
А для чего там в апдейтере BIGINT(11) Обычный INT тоже по умолчанию имеет 11
Ну у биг инта диапазон больше.
интервал столбца INT составляет от -2147483648 до 2147483647. Если попытаться записать в столбец INT число -9999999999, то оно будет усечено до нижней конечной точки интервала и вместо записываемого значения в столбце будет храниться величина -2147483648. Аналогично, если попытаться записать число 9999999999, то взамен запишется число 2147483647.
.
╭∩╮ (`-`) ╭∩╮
Чтоб не морочить голову, вот, лучше ловите class_ipinit от новой версии двига.
Там радикально изменен алгоритм проверки адресов, что за прокси (HTTP_X_FORWARDED_FOR)
Описываю как:
Мы знаем, что зачастую на недорогих хостингах (которых в принципе большинство), для ускорения применяется прокси-сервер ngnix
Чтоб он правильно транслировал внешние адреса, его нужно правильно настроить. Но к сожалению, далеко не все хостинги это делают. И тогда, в глобальной переменной HTTP_X_FORWARDED_FOR вместо IP адреса, оказывается фиг знает что.

Потому, я радикально изменил алгоритм.
1) Проверяется, есть ли переменная HTTP_X_FORWARDED_FOR
2) Если она есть, то проходит полдную валидацию на корректный IP адрес, то есть, должно состоять из 4-х цифр от 0 до 255, разделенными точками.
Если так, то валидация прошла и возвращается IP адрес, если нет, возвращается ошибка (false)
3) Если переменной HTTP_X_FORWARDED_FOR нет, или она не прошла валидацию на корректный IP адрес, то используется надежная переменная REMOTE_ADDR
4) Если уже и REMOTE_ADDR нет, то скрипт убивается с выводом сообщения о неверном IP адресе.
Прикрепленные файлы:
.
AlkatraZ
╭∩╮ (`-`) ╭∩╮
Максим (15.04.2010/15:12)
Ну у биг инта диапазон больше.
Это ясно, НО ты в апдейтере использовал длину (11), что и так было.
.
В стельку трезвый
AlkatraZ, ну в апдэйте ставится BIGINT
А циферкам я значения как то не придавал. Что тебе не нравится в BIGINT( 11 ) не знаю.
.
╭∩╮ (`-`) ╭∩╮
Максим (15.04.2010/15:24)
AlkatraZ, ну в апдэйте ставится BIGINTА циферкам я значения как то не придавал. Что тебе не нравится в BIGINT( 11 ) не знаю.
Потому и не понравилось, что нелогично.
INT(11) и BIGINT(11) абсолютно равны.
.
AlkatraZ, с новым классом проблема 127.255.255.255 у гостей так и не пропала
.
В стельку трезвый
AlkatraZ, Блин да прочитай внимательно.
Диапазон инта от минус 2147483647 до плюс 2147483647
Да, количество чисел равное, но нам то надо бОльший диапазон чем у инта.
Всего: 55