Определить IP только что зарегистрированного

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
Stern
phpBB 2.0.3
Сообщения: 368
Стаж: 20 лет

Сообщение Stern »

Ув. гуру, вы мне просто скажите - возможно решение вопроса или нет? Чтобы показывал IP при регистрации, как при написании поста? (Не понимаю, чем отличаются эти две функции в данном контексте)
Аватара пользователя
/DiOs
Former team member
Сообщения: 1139
Стаж: 19 лет 2 месяца
Откуда: Ленинград

Сообщение /DiOs »

Stern писал(а):Чтобы показывал IP при регистрации, как при написании поста?
Оно так и есть. Но кто вам сказал, что у одного и того же пользователя будет виден один и тот же адрес, даже если он сидит за тем же самым компьютером? Как вам верно сказали, вариантов может быть масса. А еще и с учетом разных целей, которые может преследовать пользователь. Например, подсказываю: адрес вот этой самой машины, с которой я сейчас пишу, 10.0.185.10. Я догадываюсь, каким адресом она светится вам. Скорее всего, и завтра будет светиться тем же, но совершенно не обязательно: если я включу динамику по той или иной причине (совсем не для того, чтобы вас обмануть), то появится уже где-то 240 возможностей. Правда, из одной сети. Заметьте: я не собираюсь скрываться.
И если я неправ, пусть старшие товарищи поправят меня
Stern
phpBB 2.0.3
Сообщения: 368
Стаж: 20 лет

Сообщение Stern »

Ну так мне не надо конкретный IP, пускай будет только адрес самого прокси, пускай даже анонимный.

Объясните, почему при регистрации МОД показывает 10.1.5.14, а при написании поста с этого же компа, при всех тех же условиях - 218.115.240.254?
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 20 лет 5 месяцев
Поблагодарили: 1 раз

Сообщение VVVas »

Stern писал(а):а при написании поста с этого же компа, при всех тех же условиях
Есть замечательная фраза у моего брата: "Два события не могут произойти одновременно - если они произошли одновременно, то это говорит только о том что у вас не очень точные часы и не более".

Скажите мне чем вам не нравиться ИП 10.1.5.14? Что в нем неИПного?
я люблю daft punk | новый sugoi.ru
Stern
phpBB 2.0.3
Сообщения: 368
Стаж: 20 лет

Сообщение Stern »

Тем, что я не могу определить, к какому провайдеру, какого города относится этот пользователь.
MrKoin
phpBB 1.0.0
Сообщения: 1
Стаж: 18 лет 8 месяцев

Сообщение MrKoin »

Сорри, случайно попал на эту статью... :) не посмотрел на даты :roll:
Stern писал(а):Ок. Понял. Но ведь должно же быть решение проблемы? Ведь когда пишут сообщения - IP определяется. Почему же нельзя определить 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']);
Причем замечу, что в случае, если хедер HTTP_X_FORWARDED_FOR не заполнен, $user_proxy_ip будет равен $user_ip, что имеет свое логическое основание с точки зрения сетевых технологий - если не удается определить реальный адрес пользователя (отделить его адрес от адреса прокси), нет гарантии, что прокси есть NAT или Transparent Proxy, etc.

Да и не нужно внедрять в код дополнительные проверки в таком случае (например, для экономии места можно было бы делать 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']);
Что, кстати, будет быстрее так как функция get_ip() выполняется только один раз.[/code]

P.P.S. Ну и не забудьте обновить соответствующим образом INSERT... ;)

Вернуться в «Поддержка phpBB 2.0.x»