Forum Webscript.Ru
Программирование => PHP => Тема начата: ramazian от 15 Января 2003, 18:35:15
-
Как настроить этот PHP TAG, что бы он определял IP ADDRESS?
Что означает: HTTP_X_FORWARDED_FOR и REMOTE_ADDR
Спосибо.
########################################################
if (getenv(\'HTTP_X_FORWARDED_FOR\'))
{
$ip=getenv(\'HTTP_X_FORWARDED_FOR\');
}
{
$ip=getenv(\'REMOTE_ADDR\');
}
?>
########################################################
-
if (isset($HTTP_X_FORWARDED_FOR)) $ip=$HTTP_X_FORWARDED_FOR;
else $ip=$REMOTE_ADDR;
это если register_globals=on
-
$HTTP_X_FORWARDED_FOR - иногда имеет значение undefined.
поэтому его еще нужно проверят на правильный формат, типа
if (isset($HTTP_X_FORWARDED_FOR) &&
preg_match("#^\\\\d{1,3}\\\\.\\\\d{1.3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}$#", $HTTP_X_FORWARDED_FOR)) $ip = $HTTP_X_FORWARDED_FOR;
код не проверял, идея думаю ясна
-
Ещё плюс ко всему в $HTTP_X_FORWARDER_FOR может быть не один ip адрес, а несколько, зависит от того сколько проксей было пройдено.
Вобщем вот моя функция, пользуйтесь на здоровье:
function get_ips() {
$result[\'IP\']=GetEnv(\'HTTP_CLIENT_IP\');
$result[\'PROXY\']=GetEnv(\'HTTP_X_FORWARDED_FOR\');
if ($result[\'PROXY\']) {
$tmp=explode(",", str_replace(" ", "", $result[\'PROXY\']));
$result[\'IP\']=$tmp[sizeof($tmp)-1];
if(!preg_match("/^[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}$/", $result[\'IP\']))
$result[\'IP\']="";
$result[\'PROXY\']=$_SERVER[\'REMOTE_ADDR\'];
}
elseif (!$result[\'IP\'])
$result[\'IP\']=$_SERVER[\'REMOTE_ADDR\'];
return $result;
}
Функция возвращает массив, состоящий из двух элементов:
IP - ip адрес пользователя, если пусто значит было unknown.
PROXY - адрес последнего пройденого прокси сервера.
-
а можно чтобы выводились все пройденые прокси?
-
ну я имею ввиду
result[proxy][0]...[10]
-
а можно чтобы выводились все пройденые прокси?
Можно, они хранятся в $HTTP_X_FORWARDED_FOR, думаю распарсить сам сможешь.
-
ааааааа крута...
пасиба!