Я нашел некоторую информацию о сохранении 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
(Это было рекомендовано для кого-то еще здесь.)
Короче говоря, я делаю это правильно?
Ваш код может быть расширен, следующая функция может быть использована для получения 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) в базе данных.
Вот к чему я пришел после еще нескольких поисков:
Я изменил INT(11)UNSIGNED
в VARCHAR(45)
и я просто сохраняю IP без использования ip2long();
остальное такое же, как было раньше. Теперь добавляет ::1
к IP
столбец на столе, когда я отправляю тест. Я предполагаю, что это работает хорошо, и я проверю это, когда я действительно опубликую сайт.
примечание: я приму этот ответ, когда он станет доступен. Спасибо за ваше время.