<?php
header("Content-Type:text/html;charset=gbk");
$s = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js");
preg_match('/{.+}/',$s,$r);
$p = json_decode($r[0]);
$city = $p->city;
?>
//<?php echo $SA_IP?>//
还有这样调用,好像返回的是服务器IP,不是用户的IP,使用JS返回的好像正常,PHP要怎么样修改一下
<?php echo $SA_IP?>输出乱码,查看源文件是正常的,怎么样说这个参数输出正常
header("Content-Type:text/html;charset=gbk");
$s = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js");
preg_match('/{.+}/',$s,$r);
$p = json_decode($r[0]);
$city = $p->city;
?>
//<?php echo $SA_IP?>//
还有这样调用,好像返回的是服务器IP,不是用户的IP,使用JS返回的好像正常,PHP要怎么样修改一下
<?php echo $SA_IP?>输出乱码,查看源文件是正常的,怎么样说这个参数输出正常
header("Content-Type:text/html;charset=utf-8");
<?php
//phpinfo();
?>
<script src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"></script>
<script type="text/javascript">
var showName = function(ip_info)
{
alert(ip_info.city);
}
showName(remote_ip_info);
</script>
function getIP(){
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 = false;
return $ip;
}
$ip = getIP();
if (empty($ip)) {
echo '无法获得IP';
} else {
$json = file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=' . $ip);
$info = json_decode($json);
var_dump($info);
}这样的话你自己测试估计不能通过,因为你获得的ip是你内网的ip,只有别人通过外网访问你的时候才能获得真实的ip
$ip = '202.101.200.5';
//$ip = '114.112.73.200';
$s = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=$ip");
preg_match('/{.+}/',$s,$r);
$p = array_map(function($s) { return iconv('utf-8', 'gbk', $s); }, json_decode($r[0], 1));
print_r($p);Array
(
[ret] => 1
[start] => -1
[end] => -1
[country] => 中国
[province] => 江西
[city] => 萍乡
[district] =>
[isp] =>
[type] =>
[desc] =>
)
获取用户的 ip 应该都会吧?
header("Content-Type:text/html;charset=utf-8");
function getip(){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return($ip);
}
function getIPLoc_sina($queryIP){
$url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=' . $queryIP;
$ch = curl_init($url);//初始化url地址
curl_setopt($ch, CURLOPT_ENCODING, 'utf8');//设置一个cURL传输选项
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 获取数据返回
$location = curl_exec($ch);//执行一个cURL会话
$location = json_decode($location);//对 JSON 格式的字符串进行编码
curl_close($ch);//关闭一个cURL会话
$loc = "";
if ($location === FALSE) return "地址不正确";
if (empty($location->desc)) {
$loc = $location->city;
} else { $loc = $location->desc;}
return $loc;
}
$SA_IP=getip();
$city = getIPLoc_sina($SA_IP);
?>
//<?php echo $city?>//
我修改后如下,能获取到IP和城市,但是PHP获取出来的IP和百度查询的IP不一样,我百度查询IP地址是中国上海,长城宽带,实际上我是这个网络,但上面代码PHP输出来的IP不一样,是北京的。是不是没写对。