用淘宝的 IP 地址库,把 IP 地址并转换成真实地址

此处用的淘宝的 IP 地址库 http://ip.taobao.com/service/getIpInfo.php?ip=XXXX

$url = 'http://ip.taobao.com/service/getIpInfo.php?ip=' . $ip;
//$ip 为用户的 IP 地址,须自己定义获取。
$ip=json_decode(file_get_contents($url));
if((string)$ip->code=='1'){
 echo "false";
}else{
    $data = (array)$ip->data;
    if($ip == null || $ip == "") {
        return "Query false";
    } else {
        if((string)$ip->code=='1') {
            echo "Query false";
        }
        $data = (array)$ip->data;
        $desc = "";
        if($data['country'] != '' && $data['country'] != "undefined"){
            $desc .= $data['country'];
        }
        if($data['area'] != '' && $data['area'] != "undefined"){
            $desc .= " " . $data['area'];
        }
        if($data['region'] != '' && $data['region'] != "undefined"){
            $desc .= " " . $data['region'];
        }
        if($data['city'] != '' && $data['city'] != "undefined"){
            $desc .= " " . $data['city'];
        }
        if($data['county'] != '' && $data['county'] != "undefined") {
            $desc .= " " . $data['county'];
        }
        if($data['isp'] != '' && $data['isp'] != "undefined") {
            $desc .= " " . $data['isp'];
        }
        if($desc == "" || $desc == "undefined") {
            $desc = "未知";
        }

        echo $desc;
    }
}

这个方法有个弊端,如果服务器连接淘宝服务器慢了会导致页面加载变慢,尤其是多个 IP 需要同时处理的时候。

于是经过改良把 file_get 换成 curl_get 并设置超时时间。

$ch = curl_init();
$url = 'http://ip.taobao.com/service/getIpInfo.php?ip=' . $ip;
//$ip 为用户的 IP 地址,须自己定义获取。
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);//设定超时时间为 3 秒
$ip = curl_exec($ch);
curl_close($ch);
$ip=json_decode($ip);
if($ip == null || $ip == ""){
    echo "获取信息超时";
}else{
    if((string)$ip->code=='1'){
        echo "Query false";
    }
    $data = (array)$ip->data;
    $desc = "";
    if($data['country'] != '' && $data['country'] != "undefined"){
        $desc .= $data['country'];
    }
    if($data['area'] != '' && $data['area'] != "undefined"){
        $desc .= " " . $data['area'];
    }
    if($data['region'] != '' && $data['region'] != "undefined"){
        $desc .= " " . $data['region'];
    }
    if($data['city'] != '' && $data['city'] != "undefined"){
        $desc .= " " . $data['city'];
    }
    if($data['county'] != '' && $data['county'] != "undefined") {
        $desc .= " " . $data['county'];
    }
    if($data['isp'] != '' && $data['isp'] != "undefined") {
        $desc .= " " . $data['isp'];
    }
    if($desc == "" || $desc == "undefined")
    {
        $desc = "未知";
    }

    echo $desc;
}

改良后加载速度变得快得多,也不会出现 file_get 可能出现的错误。

这短代码就是我在 not ss 上用的加载 IP 地址的代码,有时候会出现超时就直接加载出“获取信息超时”的字样了,当然建议是把加载的数据存储在数据库里,下次查询的时候直接在数据库里读取,效果会更好。

同样一段代码 PHP7 里不能执行

以前运行没问题的一段代码在 PHP7 的环境下就出错了

if 里面用 break 会出现 500 的错误。

if(条件一){
	if(条件二){
		echo "```";
		break;
	}
	``````
}

改为

if(条件一){
	if(条件二){
		echo "```";
	}else{
		``````
	}
}

奇怪,为什么以前会把 break 用在 if 里面?