Получение IP-адреса

Стандртный код получания IP-адреса выглядит так:

$ip=$_SERVER['REMOTE_ADDR']

Если мы хотим получить все, что нам может дать серверное окружение (X-Forwarded-For, Via и прочих), то возьмем и напишем простой код, который в цикле перебирает массив $_SERVER и регулярным выражением выбирает все заголовки, в которых встречается подходящая под шаблон IP-адреса строка. Если встретилась, то весь заголовок – с именем и всем содержимым – добавляем в строку.


REMOTE_ADDR: 98.81.24.230

function get_all_ip() {
  $ip_pattern="#(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)#";
  $ret="";
  foreach ($_SERVER as $k => $v) {
    if (substr($k,0,5)=="HTTP_" AND preg_match($ip_pattern,$v)) $ret.=$k.": ".$v."\n";
  }
  return $ret;
}
echo get_all_ip();

Вариант более простого определения IP:

function getRealIpAddr()
{
  if (!empty(@$_SERVER['HTTP_CLIENT_IP']))
    return $_SERVER['HTTP_CLIENT_IP'];
  elseif (!empty(@$_SERVER['HTTP_X_FORWARDED_FOR']))
    return $_SERVER['HTTP_X_FORWARDED_FOR'];
  else
    return@$_SERVER['REMOTE_ADDR'];
}

.