youtube_com_chevichelov
@youtube_com_chevichelov

Как в PHP 7 определять IP адрес пользователя?

ОС: UBUNTU
Устройство сервера:
1. Nginx прокси.
2. Apache для работы PHP
3. Установлен PHP 7

IP пользователя проверяю этой функцией
public function get_client_ip() {
		$ipaddress = '';
		if (getenv('HTTP_CLIENT_IP'))
			$ipaddress = getenv('HTTP_CLIENT_IP');
		else if(getenv('HTTP_X_FORWARDED_FOR'))
			$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
		else if(getenv('HTTP_X_FORWARDED'))
			$ipaddress = getenv('HTTP_X_FORWARDED');
		else if(getenv('HTTP_FORWARDED_FOR'))
			$ipaddress = getenv('HTTP_FORWARDED_FOR');
		else if(getenv('HTTP_FORWARDED'))
		   $ipaddress = getenv('HTTP_FORWARDED');
		else if(getenv('REMOTE_ADDR'))
			$ipaddress = getenv('REMOTE_ADDR');
		else
			$ipaddress = 'UNKNOWN';
		return $ipaddress;
	}

Но иногда вижу в db пустые записи вместо IP пользователя. (под поле ip в бд выделено 50 символов типа VARCHAR)

В чём может быть причина?
  1. Функция устарела?
  2. Nginx неправильно настроен?
  3. В PHP 7 IP определяется по другому?
  4. IPv6?
  • Вопрос задан
  • 1365 просмотров
Пригласить эксперта
Ответы на вопрос 2
nefone
@nefone
Junior PHP разработчик
выведет ip адрес пользователя:
<?php
echo $_SERVER['REMOTE_ADDR'];
?>

больше про $_SERVER можно почитать тут
Ответ написан
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
$ip = getenv('REMOTE_ADDR', true) ?? getenv('REMOTE_ADDR')

как вариант nginx настроен не верно, советую просмотреть:
mppks.ru/vds/pravilnyiy-remote_addr-v-nginx-apache
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы