通過php擷取ip所屬地的介面,要是自己弄一個ip庫的話,會比較麻煩,而且需要經常更新,所以不現實。網上找了一些介面,發現好多都不能用了,於是自己寫了一個,通過抓ip138頁面來提取資訊。只要它不改版,這個就能永久有效。
響應比較快,小網站用此介面完全沒有問題,代碼如下:
<?php
header("Content-type:text/html;charset=utf-8");
$ip = checkip(@$_GET['ip']);
if(!$ip)
{
exit( json_encode( array('error'=>1, 'msg'=>'參數ip不正確') ) );
}
$url = 'http://www.ip138.com/ips1388.asp?ip='.$ip.'&action=2';
$ipInfo = file_get_contents($url);
$ipInfo = iconv('gb2312', 'utf-8', $ipInfo);
preg_match('/<li>本站主要資料:(.*)<\/li><li>/i', $ipInfo, $info);
if($info[1])
{
exit( json_encode( array('error'=>0, 'pos'=>$info[1]) ) );
}
else
{
exit( json_encode( array('error'=>1, 'msg'=>'解析失敗') ) );
}
/**
* 驗證ip格式是否正確
*/
function checkip($ip)
{
$ip = substr($ip, 0, 15); //ipv4最多隻有這麼長
if( !preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $ip) )
{
return false;
}
else
{
return $ip;
}
}
?>
訪問形式為:localhost/ip.php?ip=xxx.xxx.xxx.xxx。帶一個參數就行了,返回為json格式的資料