Как узнать IP-адрес посетителя
Короткий ответ
Адрес соединения лежит в $_SERVER['REMOTE_ADDR']:
<?php
echo $_SERVER['REMOTE_ADDR'];За прокси или балансировщиком
Если сайт стоит за прокси, REMOTE_ADDR — адрес прокси, а настоящий передаётся в заголовке X-Forwarded-For. Читайте его, только если запрос пришёл от вашего прокси: посетитель может подделать заголовок.
<?php
$trustedProxies = ['10.0.0.1'];
$ip = $_SERVER['REMOTE_ADDR'];
if (in_array($ip, $trustedProxies, true) && isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = trim(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0]);
}Проверка адреса
filter_var() проверяет, что строка — правильный IP-адрес:
<?php
var_dump(filter_var('192.168.1.10', FILTER_VALIDATE_IP) !== false);
var_dump(filter_var('999.1.1.1', FILTER_VALIDATE_IP) !== false);Результат:
bool(true)
bool(false)Функции из этого ответа
- filter_var — Проверяет или очищает значение по заданному правилу.
- explode — Разбивает строку на массив по разделителю.
- trim — Удаляет пробелы и другие символы с начала и конца строки.