Пробовал множество скриптов результат - множество ошибок. подскажите простой способ узнать реальный айпи пользователя. :idea:
PHP: <?php /** * Get user ip * * @return string */ function getIp() { static $ip = null; if ($ip === null) { if (isset($_SERVER)) { if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && isValidIp($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && isValidIp($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } else { $ip = $_SERVER['REMOTE_ADDR']; } } else { if (getenv('HTTP_X_FORWARDED_FOR') && isValidIp(getenv('HTTP_X_FORWARDED_FOR'))) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('HTTP_CLIENT_IP') && isValidIp(getenv('HTTP_CLIENT_IP'))) { $ip = getenv('HTTP_CLIENT_IP'); } else { $ip = getenv('REMOTE_ADDR'); } } } return $ip; } /** * Checks if IP is valid public internet ip * * @param string $ip * @return bool */ function isValidIp($ip) { if (!empty($ip) && $ip == long2ip(ip2long($ip))) { // reserved IANA IPv4 addresses // [url=http://www.iana.org/assignments/ipv4-address-space]http://www.iana.org/assignments/ipv4-address-space[/url] $reserved = array ( array('0.0.0.0', '2.255.255.255'), array('10.0.0.0', '10.255.255.255'), array('127.0.0.0', '127.255.255.255'), array('169.254.0.0', '169.254.255.255'), array('172.16.0.0', '172.31.255.255'), array('192.0.2.0', '192.0.2.255'), array('192.168.0.0', '192.168.255.255'), array('255.255.255.0', '255.255.255.255') ); foreach ($reserved as $r) { $min = ip2long($r[0]); $max = ip2long($r[1]); if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) return false; } return true; } else { return false; } }
Psih Допустим я поверил в функцию function getIp()... но на счет function isValidIp($ip) меня терзают смутные сомнения... да и вообще как ей пользоваться, если 1я функция ничего не дала...
а может кто еще более надежный способ знает идентификации пользователей системой ( что то вроде uniqid(""); ... или еще более надежно: uniqid( getIp(), FALSE); )
$oft getIp использует isValidIp блин, неужели вы так слепы? о.О и смотрите коммент в isValidIp и перестанте сомневаться.
да он каждый раз уникален, именно поэтому второго такого уже не будет. следовательно можно оценить присутствие определенного пользователя в системе сравнив этот ключ в куках или еще где с тем что записан в бд
ip: 127.0.0.1 эм... это по ходу не совсем мой айпи... правда я на локальном хосте это делаю. это нормально или косяк какой то?
Это IP локального соеденения. Для каждого отдельного соеденения может быть настроен свой IP-адрес, таким образом компьютер может иметь несколько IP-адресов. Минус этих заголовков в том, что у разных пользователей они могут содержать одинаковые IP-адреса. Наиболее достоверно можно определять пользователя по IP-адресу+кука+браузер.
[vs] Ну заголовок топика "Как узнать реальный IP пользователя", а то что автору реально надо другое - его проблемы - пусть редактирует заголовок