Определить IP только что зарегистрированного
-
- phpBB 2.0.3
- Сообщения: 368
- Стаж: 20 лет
-
- Former team member
- Сообщения: 1139
- Стаж: 19 лет 2 месяца
- Откуда: Ленинград
Оно так и есть. Но кто вам сказал, что у одного и того же пользователя будет виден один и тот же адрес, даже если он сидит за тем же самым компьютером? Как вам верно сказали, вариантов может быть масса. А еще и с учетом разных целей, которые может преследовать пользователь. Например, подсказываю: адрес вот этой самой машины, с которой я сейчас пишу, 10.0.185.10. Я догадываюсь, каким адресом она светится вам. Скорее всего, и завтра будет светиться тем же, но совершенно не обязательно: если я включу динамику по той или иной причине (совсем не для того, чтобы вас обмануть), то появится уже где-то 240 возможностей. Правда, из одной сети. Заметьте: я не собираюсь скрываться.Stern писал(а):Чтобы показывал IP при регистрации, как при написании поста?
И если я неправ, пусть старшие товарищи поправят меня
-
- phpBB 2.0.3
- Сообщения: 368
- Стаж: 20 лет
-
- Former team member
- Сообщения: 4463
- Стаж: 20 лет 5 месяцев
- Поблагодарили: 1 раз
Есть замечательная фраза у моего брата: "Два события не могут произойти одновременно - если они произошли одновременно, то это говорит только о том что у вас не очень точные часы и не более".Stern писал(а):а при написании поста с этого же компа, при всех тех же условиях
Скажите мне чем вам не нравиться ИП 10.1.5.14? Что в нем неИПного?
-
- phpBB 2.0.3
- Сообщения: 368
- Стаж: 20 лет
-
- phpBB 1.0.0
- Сообщения: 1
- Стаж: 18 лет 8 месяцев
Сорри, случайно попал на эту статью...
не посмотрел на даты 

Ну и понятно, сменить код на что-то типа этого:
Причем замечу, что в случае, если хедер HTTP_X_FORWARDED_FOR не заполнен, $user_proxy_ip будет равен $user_ip, что имеет свое логическое основание с точки зрения сетевых технологий - если не удается определить реальный адрес пользователя (отделить его адрес от адреса прокси), нет гарантии, что прокси есть NAT или Transparent Proxy, etc.
Да и не нужно внедрять в код дополнительные проверки в таком случае (например, для экономии места можно было бы делать proxy_ip=NULL если proxy_ip=user_ip, но тогда код пришлось бы изменить куда серьезнее).
P.S. Так как я не уверен, что во всех версиях PHP имеется поддержка извлечения значения из массива, полученного из функции, сразу, лучше код
заменить на
Что, кстати, будет быстрее так как функция get_ip() выполняется только один раз.[/code]
P.P.S. Ну и не забудьте обновить соответствующим образом INSERT...


А что мешает сделать еще одно поле в базе и хранить в нем адрес РЕАЛЬНОГО IP?Stern писал(а):Ок. Понял. Но ведь должно же быть решение проблемы? Ведь когда пишут сообщения - IP определяется. Почему же нельзя определить IP при регистрации? Хотя бы самого прокси?

Код: Выделить всё
ALTER TABLE phpbb_users
ADD proxy_ip TINYTEXT default NULL;
Код: Выделить всё
function get_ip()
{
/*
NOTE: Важно: функция возвращает именованный массив, а не значение!
/*
$result = array();
$result['proxy_ip'] = $_SERVER['REMOTE_ADDR'];
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$result['user_ip'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$result['user_ip'] = $result['proxy_ip'];
}
return $result;
}
$user_ip = encode_ip(get_ip()['user_ip']);
$user_proxy_ip = encode_ip(get_ip()['proxy_ip']);
Да и не нужно внедрять в код дополнительные проверки в таком случае (например, для экономии места можно было бы делать proxy_ip=NULL если proxy_ip=user_ip, но тогда код пришлось бы изменить куда серьезнее).
P.S. Так как я не уверен, что во всех версиях PHP имеется поддержка извлечения значения из массива, полученного из функции, сразу, лучше код
Код: Выделить всё
$user_ip = encode_ip(get_ip()['user_ip']);
$user_proxy_ip = encode_ip(get_ip()['user_ip']);
Код: Выделить всё
$m_user_ip = get_ip();
$user_ip = encode_ip(m_user_ip['user_ip']);
$user_proxy_ip = encode_ip(m_user_ip['proxy_ip']);
P.P.S. Ну и не забудьте обновить соответствующим образом INSERT...
