当前位置:  编程技术>php

php获取ip地理信息几种方法

    来源: 互联网  发布时间:2014-08-30

    本文导语:  方法一,利用纯真ip数据库,这个可以在网上找到很多,缺点是更新有点慢。   方法二,利用门户网站的接口 目前已知的有腾讯、新浪、网易、搜狐和Google提供IP地址查询API,但是找得到的只有腾讯、新浪和网易的,Google的...

方法一,利用纯真ip数据库,这个可以在网上找到很多,缺点是更新有点慢。
 
方法二,利用门户网站的接口
目前已知的有腾讯、新浪、网易、搜狐和Google提供IP地址查询API,但是找得到的只有腾讯、新浪和网易的,Google的貌似要用Google Maps所以没有研究。看了下国内的几个腾讯提供的是JavaScript的,网易提供的是XML,而新浪的有多种格式可以用,注意非XML的数据源都是GBK格式的,不管是JavaScript调用还是PHP调用都要转换一下编码,不然得到的是乱码。而更需要注意的是,如果一次性查询多个IP,使用门户网站的API来查询会非常缓慢,我大概写了个for循环试了下,不管是用PHP解析XML还是file_get_contents()函数获取内容,查询10次以上会变得非常缓慢,甚至可能超时。

腾讯的IP地址API接口地址:http://fw.qq.com/ipaddress,返回的是数据格式为:var IPData = new Array("123.124.2.85","","北京市","");,一个JavaScript的对象,目前还不知道如何输入IP查询。

新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js

新浪多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=123.124.2.85

网易有道的IP地址查询接口:http://www.youdao.com/smartresult-xml/search.s?type=ip&q=123.124.2.85
 
使用JS代码进行调取腾讯的api接口:
 

代码示例:


document.write("你的IP是:"+IPData[0]+",来自:"+IPData[2]);
//腾讯API的PHP调用方法
function getIpPlace(){
 $ip=file_get_contents("http://fw.qq.com/ipaddress");
 $ip=str_replace('"',' ',$ip);
 $ip2=explode("(",$ip);
 $a=substr($ip2[1],0,-2);
 $b=explode(",",$a);
 return $b;
}
$ip=getIpPlace();
print_r($ip);
//调用查询接口需要抓取网页,有三种方法,第一种是curl,第二种是
//file_get_contents,第三种fopen->fread->fclose,推荐第二种方法
/*
 *根据腾讯IP分享计划的地址获取IP所在地,比较精确
 */
function getIPLoc($queryIP){
$url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
$result = curl_exec($ch);
$result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
   curl_close($ch);
preg_match("@(.*)

@iU",$result,$ipArray);
$loc = $ipArray[1];
return $loc;
}

//根据腾讯接口查询ip地址,使用file_get_contents抓去网页
function getIPLoc($queryIP){
$url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
$result = file_get_contents($url);
$result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
preg_match("@(.*)

@iU",$result,$ipArray);
$loc = $ipArray[1];
return $loc;
}
//根据腾讯接口查询ip地址,使用fopen->fread->fclose抓去网页
function getIPLoc($queryIP){
$url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
$handle = fopen ("$url", "rb");
$result = "";
do {
   $data = fread($handle, 1024);
   if (strlen($data) == 0) {
   break;
   }
   $result .= $data;
} while(true);
$result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
preg_match("@(.*)

@iU",$result,$ipArray);
$loc = $ipArray[1];
return $loc;
}
 

/********注:
1,使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置allow_url_fopen = On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。
2,使用curl必须空间开启curl。方法:windows下修改php.ini,将extension=php_curl.dll前面的分号去掉,而 且需要拷贝ssleay32.dll和libeay32.dll到C:WINDOWSsystem32下;Linux下要安装curl

代码示例:
扩展*****/
//新浪查询ip接口  第五个第六个是地理信息
function getiploc($IP_ip){
$IP_str = @file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip='.$IP_ip);
        if(!empty($IP_str)){   
            $IP_tmp = explode("    ", $IP_str);
            $IP_city = iconv("GBK", "UTF-8", $IP_tmp[5]);
return  $IP_city;
}
 
//有道API的PHP调用方法
$url = "http:www.youdao.com/smartresult-xml/search.s?type=ip&q=".$ip;
$doc = new DOMDocument();
   $doc->load($url);
   $smartresult = $doc->getElementsByTagName("product");
   foreach($smartresult as $product)
   {
      $locations = $product->getElementsByTagName("location");
      $location = $locations->item(0)->nodeValue;
   }
   if($location != "")
   {
       echo $i.".".$ip;
       echo "  来自".$location."的网友";
   }
   else
   {
       echo $i.".".$ip;
       echo "  来自火星的网友";
   }
public function sinaIPApi($ip){
   $str = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=".$ip);
   $str = iconv("gbk", "utf-8//IGNORE", $str);
   preg_match_all("/[x{4e00}-x{9fa5}]+/u",$str,$get);
   $add = implode('',$get[0]);
   return $add;
}
//$get是一个非常棒的二维数组
 

新浪API也可以像腾讯API那样用file_get_contents()函数获取完地址后使用一连串的字符串函数处理,使用正则表达式从新浪的返回结果中提供包含中文的字符串,并且分段存入一个二维数组,这个可能只是针对新浪的API有用并且存在bug。

举个例子,查询学校分配给我的IP地址后var_dump()一下函数中$get变量得到以下结果:
array(1) { [0]=> array(6) { [0]=> string(6) "中国" [1]=> string(6) "北京" [2]=> string(6) "北京" [3]=> string(9) "教育网" [4]=> string(6) "学校" [5]=> string(18) "中国地质大学" } },而函数输出的结果则是“中国北京北京教育网学校中国地质大学”,希望我的思路和方法能对别人有用。

您可能感兴趣的文章:
  • php新浪接口查询ip地理位置
  • php腾讯ip分享计划获取IP地理位置
  • php通过IP获取地理位置
  • PHP通过IP获取地理位置的代码
  • php获取网站地理位置及操作系统信息的代码分享
  • php通过IP获取地理位置的实例参考
  • php 获取用户真实IP与地理位置(淘宝IP接口)的实现代码
  • php 获取客户端IP地址、地理信息、浏览器信息、本地真实IP的代码
  • php根据IP地址获取当前地理位置接口

    
 
 

您可能感兴趣的文章:

  • PHP获取浏览器信息类和客户端地理位置的2个方法
  • php获取访客ip地址原理及提供七段代码供参考
  • php获取本机ip地址 php获取远程IP地址
  • PHP获取php、mysql与apache版本
  • PHP获取php,mysql,apche的版本信息示例代码
  • php获取字段名的代码
  • php获取当前时间的毫秒数
  • PHP实现获取图片颜色值的方法
  • php反射机制获取php类的所有方法
  • PHP数组根据值获取Key的简单示例
  • php获取文件大小的二种方法
  • php求两个目录的相对路径示例(php获取相对路径)
  • php获取图片颜色值的例子
  • PHP获取每周六日期 php判断奇数偶数
  • php获取参数的几种方法总结
  • php获取参数有几种方法
  • PHP获取Mysql插入记录ID
  • php获取当前时间的毫秒数的方法
  • php 获取远程网页内容简单函数
  • php获取淘宝分类id(示例)
  • php获取exif图片缩略图的例子
  • php通过IP获取地理位置
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • PHP地理位置计算库 PHP Geo
  • php腾讯ip分享计划获取IP地理位置
  • php新浪接口查询ip地理位置
  • php利用新浪接口查询ip获取地理位置示例
  • php利用腾讯ip分享计划获取地理位置示例分享
  • PHP通过IP获取地理位置的代码
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • php输入流php://input使用示例(php发送图片流到服务器)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • PHP转换器 HipHop for PHP
  • PHP去除html标签,php标记及css样式代码参考
  • PHP 框架 Pop php
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP的JavaScript框架 PHP.JS
  • php通过socket_bind()设置IP地址代码示例
  • php服务器探针显示php服务器信息
  • php安装完成后如何添加mysql扩展
  • PHP缓存加速器 Alternative PHP Cache (APC)
  • PHP的substr() 函数用法
  • PHP源文件加密工具 PHP Screw
  • PHP介绍及学习网站推荐
  • PHP自动化测试 PHP-QAT
  • php中操作memcache的类及成员列表及php下如何连接memched服务器
  • PHP 的 HTTP 客户端库 PHP Buzz
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • PHP 调试工具 PHP_Dyn


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3