Вам понадобится
  • Базовое знание языка PHP
Инструкция
1
Для извлечения IP-адреса из заголовков, присылаемых на сервер запросов браузера, следует использовать функцию getenv. Она читает из переменных среды указанные ей значения. Для хранения IP-адреса посетителя предназначена переменная с именем REMOTE_ADDR. Однако клиент может использовать прокси-сервер, а в этом случае в переменной будет содержаться его адрес, а вовсе не тот, который вам нужен. Узнать, что веб-серфер использует промежуточный IP, можно из переменной окружения с именем HTTP_VIA. В нее через запятую помещаются все адреса задействованных в цепочке прокси-серверов. Адрес посетителя промежуточные серверы обязаны помещать в переменную с именем HTTP_X_FORWARDED_FOR, однако это полностью зависит от настроек прокси. Значит, чтобы охватить как можно больше возможностей определения IP-адреса, надо проверять содержимое как минимум трех переменных: REMOTE_ADDR, HTTP_X_FORWARDED_FOR и еще желательно HTTP_CLIENT_IP.
2
Объединить проверку всех трех переменных в одну строку PHP-кода можно, например, так:
$ipAddr = getenv('HTTP_CLIENT_IP') or $ipAddr = getenv('HTTP_X_FORWARDED_FOR') or $ipAddr = getenv('REMOTE_ADDR');
Получив таким способом значение IP-адреса, желательно его очистить от возможных искажений и лишних символов. Для этого можно использовать регулярное выражение:
$ipAddr = trim(preg_replace('#^([^,]+)(,.*)?#', '$1', $ipAddr));
3
Осталось объединить обе строки кода в одну функцию:
function getIP() {

$ipAddr = getenv('HTTP_CLIENT_IP') or $ipAddr = getenv('HTTP_X_FORWARDED_FOR') or $ipAddr = getenv('REMOTE_ADDR');

return trim(preg_replace('#^([^,]+)(,.*)?#', '$1', $ipAddr));

}