我确实找到了一些关于保存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
(这是推荐给其他人的。)
简而言之:我做得对吗?
答案 0 :(得分: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 :(得分:0)
这是我在进行了一些搜索之后提出的:
我将INT(11)UNSIGNED
更改为VARCHAR(45)
,我只是在不使用ip2long();
的情况下保存IP,其余部分与之前相同。现在,当我发布测试时,它会将::1
添加到表格中的IP
列。我认为它可以正常工作,我会在实际发布网站时查看它。
注意:我会接受这个答案。谢谢你的时间。