Вам понадобится
- Базовое знание языка PHP
Инструкция
1
Используйте встроенную функцию getenv языка PHP для чтения IP-адресов из суперглобального массива переменных окружения. В самом простом случае будет достаточно прочесть переменную с названием REMOTE_ADDR. Соответствующий фрагмент PHP-кода может выглядеть так:$userIP = getenv('REMOTE_ADDR');
2
Проверяйте кроме присланной в запросе переменной REMOTE_ADDR и переменные HTTP_VIA и HTTP_X_FORWARDED_FOR. Если посетитель использует прокси-сервер, то промежуточный адрес должен быть записан в обе переменные - и в HTTP_VIA, и в REMOTE_ADDR. В этом случае узнать реальный IP посетителя можно попробовать через HTTP_X_FORWARDED_FOR - в нее прокси-сервер должен помещать исходный адрес. Однако это делается далеко не всегда, и пользователь имеет возможность подбирать «непрозрачный» прокси-сервер, который не передает исходный IP приславшего запрос посетителя. В любом случае вы должны задействовать в своем коде максимум способов получить исходный IP-адрес, добавив еще и проверку переменной HTTP_CLIENT_IP.
3
Объедините в одну строку PHP-кода последовательную проверку трех переменных окружения, которые могут содержать исходный IP-адрес посетителя. Сделать это можно, например, так:$userIP = getenv('HTTP_CLIENT_IP') OR $userIP = getenv('HTTP_X_FORWARDED_FOR') OR $userIP = getenv('REMOTE_ADDR');
4
Удалите из полученного значения IP лишние символы и другой «мусор», который может попасть в переменные окружения. Сделать это можно, например, задействовав встроенные PHP-функции TRIM и preg_replace:$userIP = TRIM(preg_replace('#^([^,]+)(,.*)?#', '$1', $userIP));
5
Объедините весь код в пользовательскую функцию, чтобы иметь возможность обращаться к ней, а не повторять строки проверки и очистки заново в разных частях PHP-скриптов. Например, так:FUNCTION getUserIP() {
$userIP = getenv('HTTP_CLIENT_IP') OR $userIP = getenv('HTTP_X_FORWARDED_FOR') OR $userIP = getenv('REMOTE_ADDR');
RETURN TRIM(preg_replace('#^([^,]+)(,.*)?#', '$1', $userIP));
}
$userIP = getenv('HTTP_CLIENT_IP') OR $userIP = getenv('HTTP_X_FORWARDED_FOR') OR $userIP = getenv('REMOTE_ADDR');
RETURN TRIM(preg_replace('#^([^,]+)(,.*)?#', '$1', $userIP));
}