Это правильный способ получить IP при отправке формы?

Я нашел некоторую информацию о сохранении IP и нашел код ниже:

// IP GRAB
$http_client_ip = $_SERVER['HTTP_CLIENT_IP']; //MORE RELIABLE IP
$http_x_forwarded_for = $_SERVER['HTTP_X_FORWARDED_FOR']; //ALSO MORE RELIABLE
$remote_addr = $_SERVER['REMOTE_ADDR']; //NOT RELIABLE BCS IT MAY BE A SHARED NETWORK OR BEHIND A PROXY

if (!empty($http_client_ip)) {
$ip_address = $http_client_ip;
} else if (!empty($http_x_forwarded_for)) {
$ip_address = $http_x_forwarded_for;
} else {
$ip_address = $remote_addr;
}

$ip = ip2long($ip_address);

Я хотел бы получить IP-адрес пользователя, когда пользователь нажимает кнопку «отправить» / отправленную форму. Я также хочу сохранить этот IP в таблицу в базе данных. Таким образом, я сделал столбец IP на столе как INT(11) UNSIGNED(Это было рекомендовано для кого-то еще здесь.)

Короче говоря, я делаю это правильно?

1

Решение

Ваш код может быть расширен, следующая функция может быть использована для получения IP-адреса клиента:

function get_client_ip() {

$ipaddress = '';
if ($_SERVER['HTTP_CLIENT_IP'])
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if ($_SERVER['HTTP_X_FORWARDED_FOR'])
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if ($_SERVER['HTTP_X_FORWARDED'])
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if ($_SERVER['HTTP_FORWARDED_FOR'])
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if ($_SERVER['HTTP_FORWARDED'])
$ipaddress = $_SERVER['HTTP_FORWARDED'];
else if ($_SERVER['REMOTE_ADDR'])
$ipaddress = $_SERVER['REMOTE_ADDR'];
else
$ipaddress = 'UNKNOWN';

return $ipaddress;
}

Также не обязательно менять свой IP на длинный (ip2long), только если у вас есть причина сделать это.

И я сохраню его как String (VARCHAR) в базе данных.

1

Другие решения

Вот к чему я пришел после еще нескольких поисков:

Я изменил INT(11)UNSIGNED в VARCHAR(45) и я просто сохраняю IP без использования ip2long(); остальное такое же, как было раньше. Теперь добавляет ::1 к IP столбец на столе, когда я отправляю тест. Я предполагаю, что это работает хорошо, и я проверю это, когда я действительно опубликую сайт.

примечание: я приму этот ответ, когда он станет доступен. Спасибо за ваше время.

0

По вопросам рекламы [email protected]