这个问题已经在这里有一个答案:
- 如何在PHP中获取客户端IP地址 26个回答
我公司开发的PHP Web服务。 我想记录的WS客户的所有传入连接,这在消费这个Web服务。 我怎样才能获得客户端的IP地址? 的价值
$_SERVER['HTTP_CLIENT_IP']
似乎总是空的。
这个问题已经在这里有一个答案:
我公司开发的PHP Web服务。 我想记录的WS客户的所有传入连接,这在消费这个Web服务。 我怎样才能获得客户端的IP地址? 的价值
$_SERVER['HTTP_CLIENT_IP']
似乎总是空的。
这应该是你想要什么:
$_SERVER['REMOTE_ADDR']
IP地址从用户正在浏览当前页面。
http://php.net/manual/en/reserved.variables.server.php
事实上,我会建议使用此功能覆盖所有客户群,如使用代理服务器,网络共享等人的:
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地址可以是从背后的代理局域网内部IP。
这意味着,如果你要节省$_SERVER['HTTP_X_FORWARDED_FOR']
请确保您也节省了$_SERVER['REMOTE_ADDR']
值,例如,通过在数据库中保存在不同的领域都值。
如果你要的IP保存到数据库作为一个字符串,请确保您有空间至少45个字符 。 IPv6的是这里留下来,这些地址是比旧的IPv4地址大。
功能getUserIpAddr()和getRealIpAddr()是不可靠的 !
唯一可靠的IP是$ip = $_SERVER["REMOTE_ADDR"];
否则任何人都可以伪造通过发送例如CLIENT_IP头他的IP地址。
这个Firefox附加组件可以帮助您发送自定义页眉。 发送CLIENT_IP = XXXX头在运行任何此页面上的功能的服务器,将意味着客户可以选择他们想要的任何IP ...
您是否使用某种框架,为您的Web服务? 我看到一些框架(例如Agavi的 ),因为他们想enfore表示您从一个框架服务使用验证值,其故意删除所有的$服务器数据。
如果不这样做的工作,我不知道该怎么做..
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;
?>