PHP基于新浪IP库获取IP详细地址的方法

本文实例讲述了PHP基于新浪IP库获取IP详细地址的方法。分享给大家供大家参考,具体如下:

<?php
class Tool{
  /**
   * 获取IP的归属地( 新浪IP库 )
   *
   * @param $ip String    IP地址:112.65.102.16
   * @return Array
   */
  static public function getIpCity($ip)
  {
    $ip = preg_replace("/\s/","",preg_replace("/\r\n/","",$ip));
    $link = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=".$ip."&t=".time();
    $ipJson = self::httpCurl($link);
    preg_match("/\"country\":\"(.*)\"/Uis",$ipJson, $match1);
    preg_match("/\"province\":\"(.*)\"/Uis",$ipJson, $match2);
    preg_match("/\"city\":\"(.*)\"/Uis",$ipJson, $match3);
    return array(
      'country'=>self::ucode2zh($match1[1]), // 国家
      'province'=>self::ucode2zh($match2[1]), // 省
      'city'=>self::ucode2zh($match3[1])   // 城市
    );
  }
  /**
   * Curl方式获取信息
   */
  static public function httpCurl($url)
  {
    $curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT,2);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($curl_handle, CURLOPT_FAILONERROR,1);
    $file_content = curl_exec($curl_handle);
    curl_close($curl_handle);
    return $file_content;
  }
  /**
   * 将unicode编码转化为中文,转化失败返回原字符串
   *
   * @param $code String   unicode编码
   * @return String
   */
  static public function ucode2zh($code)
  {
    $temp = explode('\u',$code);
    $rslt = array();
    array_shift($temp);
    foreach($temp as $k => $v)
    {
      $v = hexdec($v);
      $rslt[] = '&#' . $v . ';';
    }
    $r = implode('',$rslt);
    return empty($r) ? $code : $r;
  }
}

获取IP地址类使用实例

<?php
$ipStr = Tool::getIpCity('112.65.102.16');
print_r($ipStr);

返回结果

Array ( [country] => 中国 [province] => 上海 [city] => 上海 )

PS:这里再为大家提供几款IP地址相关在线工具供大家参考使用:

IP地址归属地在线查询工具:
http://tools.jb51.net/aideddesign/ipcha

在线网络计算器|TCP/IP子网掩码计算与换算工具:
http://tools.jb51.net/aideddesign/ipcalc

在线IP地址/子网掩码计算与转换工具:
http://tools.jb51.net/aideddesign/ip_net_calc

在线子网掩码换算与网络计算工具:
http://tools.jb51.net/aideddesign/network_calc

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP网络编程技巧总结》、《PHP运算与运算符用法总结》、《php文件操作总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

时间: 2017-05-02

PHP基于闭包思想实现的BT(torrent)文件解析工具实例详解

本文实例讲述了PHP基于闭包思想实现的torrent文件解析工具.分享给大家供大家参考,具体如下: PHP对静态词法域的支持有点奇怪,内部匿名函数必须在参数列表后面加上use关键字,显式的说明想要使用哪些外层函数的局部变量. function count_down($count) { return $func = function() use($count,$func) { if(--$count > 0) $func(); echo "wow\n"; }; } $foo = c

PHP批量获取网页中所有固定种子链接的方法

本文实例讲述了PHP批量获取网页中所有固定种子链接的方法.分享给大家供大家参考,具体如下: 经常的下载链接比较多的时候,就像一次性将所有的链接添加到迅雷或者电炉,但是没有在这种选项,怎么办,咱是PHPer啊,这事儿难不到咱 且看代码,当然要换成你的,要根据具体情况来做修改. <?php header("content-type:text/html;charset=utf8"); $str = file_get_contents('./ShowFile.asp'); $str1 =

php进行ip地址掩码运算处理的方法

本文实例讲述了php进行ip地址掩码运算处理的方法.分享给大家供大家参考,具体如下: ip解析: function ip_parse($ip_str) { $mark_len = 32; if (strpos($ip_str, "/") > 0) { list($ip_str, $mark_len) = explode("/", $ip_str); } $ip = ip2long($ip_str); $mark = 0xFFFFFFFF << (3

PHP文件锁定写入实例解析

本文以实例讲述了PHP文件写入方法,以应对多线程写入,具体代码如下: function file_write($file_name, $text, $mode='a', $timeout=30){ $handle = fopen($file_name, $mode); while($timeout>0){ if ( flock($handle, LOCK_EX) ) { // 排它性的锁定 $timeout--; sleep(1); } } if ( $timeout > 0 ){ fwrit

php读取torrent种子文件内容的方法(测试可用)

本文实例讲述了php读取torrent种子文件内容的方法.分享给大家供大家参考,具体如下: <?php /** * Class xBEncoder * Author: Angus.Fenying * Version: 0.1 * Date: 2014-06-03 * * This class helps stringify or parse BENC * codes. * * All Copyrights 2007 - 2014 Fenying Studio Reserved. */ class

THinkPHP获取客户端IP与IP地址查询的方法

本文实例讲述了THinkPHP获取客户端IP与IP地址查询的方法.分享给大家供大家参考,具体如下: TP 中获取客户端IP地址的系统公共函数是:function get_client_ip().返回值就是IP地址. 查询IP地址所在国家与地区的类文件是IpLocation.class.php,位于ThinkPHP\Lib\ORG\Net目录下.类名是IpLocation,方法是 public function getlocation($ip=''); 省略时查询客户端IP所在地址.返回的是一个数

PHP程序中的文件锁、互斥锁、读写锁使用技巧解析

文件锁 全名叫 advisory file lock, 书中有提及. 这类锁比较常见,例如 mysql, php-fpm 启动之后都会有一个pid文件记录了进程id,这个文件就是文件锁. 这个锁可以防止重复运行一个进程,例如在使用crontab时,限定每一分钟执行一个任务,但这个进程运行时间可能超过一分钟,如果不用进程锁解决冲突的话两个进程一起执行就会有问题. 使用PID文件锁还有一个好处,方便进程向自己发停止或者重启信号.例如重启php-fpm的命令为 kill -USR2 `cat /usr

php正则提取html图片(img)src地址与任意属性的方法

简单版: <?php header("Content-Type: text/html;charset=utf-8"); $str = '<div class="ui-block-a" align="center"> <a href="online-39.html" rel="external nofollow" ><img class="lazy" w

PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法

本文实例讲述了PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法.分享给大家供大家参考,具体如下: 很多用户不知道如何复制flash地址,只能在程序中帮他们替换了: <?php /** * 支持优酷.土豆.腾讯视频html到swf转换 */ function convert_html_to_swf($url = '') { if(!is_string($url) || empty($url)) return ; if(strpos($url, 'swf')) return

php读取qqwry.dat ip地址定位文件的类实例代码

实例如下: <?php // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- cla

php读取二进制流(C语言结构体struct数据文件)的深入解析

尽管php是用C语言开发的,不过令我不解的是php没有提供对结构体struct的直接支持.不过php提供了pack和unpack函数,用来进行二进制数据(binary data)和php内部数据的互转: 复制代码 代码如下: string pack ( string $format [, mixed $args [, mixed $...]] )   //Pack given arguments into binary string according to format.  array unp

C语言中结构体struct编写的一些要点解析

一.关于结构体的声明 1.匿名声明.如: struct { int i,j; }point; 说明: 这段代码的含义是,声明一个无名(anonymous)的结构体,并创建了一个结构体变量point.如果这段声明是放在全局域(在任意函数(比如main函数)外)内,那么point内的变量将被初始化为默认值,换句话说,以这种方式声明结构体变量时就已经为它分配了内存空间. 适用于该结构体只需要产生一个变量!本例中,该匿名结构体将有且仅有point这个结构体变量! 不同的匿名结构体变量,类型是不同的!如

C语言 结构体(Struct)详解及示例代码

前面的教程中我们讲解了数组(Array),它是一组具有相同类型的数据的集合.但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放. 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为: struct 结构体名{     结构体所包含的变量或数组 }; 结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可

C语言结构体(struct)常见使用方法(细节问题)

基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量. 结构体定义: 第一种:只有结构体定义 struct stuff{ char job[20]; int age; float height; }; 第二种:附加该结构体类型的"结构体变量"的初始化的结构体定义 //直接带变量名Huqinwei struct stuff{ char job[20]; int age; floa

浅谈Go语言中的结构体struct & 接口Interface & 反射

结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struct类型理解为类,可以定义方法,和函数定义有些许区别: struct类型是值类型. struct定义 type User struct { Name string Age int32 mess string } var user User var user1 *User = &User{} var user2 *User = new(User) struct使用 下面示例中user1和

Go语言结构体定义和使用方法

本文实例讲述了Go语言结构体定义和使用方法.分享给大家供大家参考.具体分析如下: 一个结构体(struct)就是一个字段的集合. (而 type 定义跟其字面意思相符.) 复制代码 代码如下: package main import "fmt" type Vertex struct {     X int     Y int } func main() {     fmt.Println(Vertex{1, 2}) } 结构体字段使用点号来访问. 复制代码 代码如下: package

C语言 结构体数组详解及示例代码

所谓结构体数组,是指数组中的每个元素都是一个结构体.在实际应用中,结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生.一个车间的职工等. 定义结构体数组和定义结构体变量的方式类似,请看下面的例子: struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 }class[5]; 表示一个班级有5个学生. 结构体数组在定义的同时也可以初始化,例如: str

C语言结构体定义的方法汇总

什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据结构.结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问. 结构体与数组的比较 (1) 都由多个元素组成 (2) 各个元素在内存中的存储空间是连续的 (3) 数组中各个元素的数据类型相同,而结构体中的各个元素的数据类型可以不相同 结

利用C语言结构体实现通讯录

本文实例为大家分享了C语言结构体实现通讯录的具体代码,供大家参考,具体内容如下 用来存储1000个人的信息的通讯录,每个人的信息包括: 姓名.性别.年龄.电话.住址 程序如下: #include<stdio.h> #include<string.h> #include<stdlib.h> struct People { char name[20]; char sex[5]; int age; char tel[15]; char addr[50]; }; //定义人的信

C语言结构体数组同时赋值的另类用法

说到C语言结构体数组的同时赋值,许多人一想就会想到用以下的这种方法,咱们来写一个例子: #include <stdio.h> struct student { int a; int b ; int c ; }; struct student array1[1000] ; int main(void) { int i ; for(i = 0 ; i < 1000 ; i++) { array[i].a = 1 ; array[i].b = 2 ; array[i].c = 3 ; } fo