我开发了一个PHP Web服务。我想记录消费此Web服务的WS客户端的所有传入连接。如何获取客户端的IP地址?如下所示:
$_SERVER['HTTP_CLIENT_IP']
似乎始终为空。 我开发了一个PHP Web服务。我想记录消费此Web服务的WS客户端的所有传入连接。如何获取客户端的IP地址?如下所示:
$_SERVER['HTTP_CLIENT_IP']
似乎始终为空。 这应该就是你想要的:
$_SERVER['REMOTE_ADDR']
用户浏览当前页面所使用的IP地址。
实际上,我建议使用这个函数来覆盖所有的情况,比如使用代理、共享网络等:
function getUserIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //if from shared
{
return $_SERVER['HTTP_CLIENT_IP'];
}
else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //if from a proxy
{
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
return $_SERVER['REMOTE_ADDR'];
}
}
$_SERVER['REMOTE_ADDR']
包含连接方的真实 IP 地址。这是您可以找到的最可靠的值。$_SERVER['HTTP_X_FORWARDED_FOR']
,但这个值很容易被欺骗。它可以被没有代理的某个人设置为用户想要的任何值,或者 IP 可以是代理后面的 LAN 中的内部 IP。$_SERVER['HTTP_X_FORWARDED_FOR']
,请确保你也保存 $_SERVER['REMOTE_ADDR']
值,例如,通过将两个值保存在数据库的不同字段中。函数getUserIpAddr()和getRealIpAddr()是不可靠的!
唯一可靠的IP来自$ ip = $ _SERVER ["REMOTE_ADDR"];
否则,任何人都可以发送CLIENT_IP标头来伪造他的IP地址。
这个Firefox插件可以帮助您发送自定义标头。将CLIENT_IP = x.x.x.x标头发送到运行此页面上任何函数的服务器,意味着客户端可以选择任何IP ...
function getClientIP() {
if (isset($_SERVER)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
return $_SERVER["HTTP_X_FORWARDED_FOR"];
if (isset($_SERVER["HTTP_CLIENT_IP"]))
return $_SERVER["HTTP_CLIENT_IP"];
return $_SERVER["REMOTE_ADDR"];
}
if (getenv('HTTP_X_FORWARDED_FOR'))
return getenv('HTTP_X_FORWARDED_FOR');
if (getenv('HTTP_CLIENT_IP'))
return getenv('HTTP_CLIENT_IP');
return getenv('REMOTE_ADDR');
}
public static function get_remote_ip() {
if(isset($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR'])) {
return $_SERVER['REMOTE_ADDR'];
}
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
return null;
}
你可以尝试
<?php
var_dump($_SERVER);
查看所有变量。但这也取决于你的脚本运行的后端是什么。是 Apache 吗?
<?php
$ip=$_SERVER['REMOTE_ADDR'];
echo "Your IP Address is $ip";
?>
而要插入数据库,只需使用$ip即可。
<?php
function getIP() {
$ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else
$ip = "UNKNOWN";
return $ip;
}
//-----------------------------------------------
//Usage:
$client_ip=getIP();
echo "Your IP :".$client_ip;
?>