这是提交表单时获取IP的正确方法吗?
Is this the right way to grab IP when form submitted?
我确实找到了一些关于保存 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);
我想在用户推送提交 button/sent 表单时获取用户的 IP 地址。我也想把这个IP保存到数据库上的table。所以我在 table 上创建了一个 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 更改为长 IP (ip2long
),除非您有理由这样做。
我会将其保存为数据库中的字符串 (VARCHAR)。
这是我经过更多搜索后得出的结果:
我把INT(11)UNSIGNED
改成了VARCHAR(45)
,我只是保存了IP,没有使用ip2long();
,其余的和以前一样。现在,当我 post 测试时,它会将 ::1
添加到 table 的 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);
我想在用户推送提交 button/sent 表单时获取用户的 IP 地址。我也想把这个IP保存到数据库上的table。所以我在 table 上创建了一个 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 更改为长 IP (ip2long
),除非您有理由这样做。
我会将其保存为数据库中的字符串 (VARCHAR)。
这是我经过更多搜索后得出的结果:
我把INT(11)UNSIGNED
改成了VARCHAR(45)
,我只是保存了IP,没有使用ip2long();
,其余的和以前一样。现在,当我 post 测试时,它会将 ::1
添加到 table 的 IP
列。我认为它工作正常,我会在实际发布网站时检查它。
注意:当这个答案可用时,我会接受它。谢谢你的时间。