ip地址查询

<?php
Class IPQuery{
    private static $_requestURL = 'http://ip.taobao.com/service/getIpInfo.php';
    public static function getIPInfo($ip){
        $long = ip2long($ip);
        if($long === 0){
            throw new Exception('IP address error', 5);
        }
        $ip=long2ip($long);
        $IPInfo = self::queryIPInfo($ip);
        return self::parseJSON($IPInfo);
    }
    
    private static function queryIPInfo($ip){
        $query = http_build_query(array('ip'=>$ip));
        $ch = curl_init();
        $options = array(
            CURLOPT_URL => sprintf('%s?%s', self::$_requestURL, $query),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_AUTOREFERER => false,
            CURLOPT_FOLLOWLOCATION => false,
            CURLOPT_HEADER => false,
            CURLOPT_TIMEOUT => 3.0,
        );
        curl_setopt_array($ch, $options);
        $content = curl_exec($ch);
        curl_close($ch);
        return $content;
    }
    
    private static function parseJSON($json){
        $O = json_decode ($json, true);
        if(false === is_null($O)){
            return $O;
        }
        if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
            $errorCode = json_last_error();
            if(isset(self::$_JSONParseError[$errorCode])){
                throw new Exception(self::$_JSONParseError[$errorCode], 5);
            }
        }
        throw new Exception('JSON parse error', 5);
    }
    
    private static $_JSONParseError = array(
        JSON_ERROR_NONE=>'No error has occurred',   
        JSON_ERROR_DEPTH=>'The maximum stack depth has been exceeded',   
        JSON_ERROR_CTRL_CHAR=>'Control character error, possibly incorrectly encoded',   
        JSON_ERROR_STATE_MISMATCH=>'Invalid or malformed JSON',   
        JSON_ERROR_SYNTAX=>'Syntax error',   
        JSON_ERROR_UTF8=>'Malformed UTF-8 characters, possibly incorrectly encoded',
    );
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

python开发_logging_日志处理

============================================================

12730
来自专栏码农二狗

php持久化连接数据库

21830
来自专栏pangguoming

简单的Hibernate入门简介

其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持。然而,大多数的Hibernate入门介绍...

37190
来自专栏battcn

一起来学SpringBoot | 第二十五篇:打造属于你的聊天室(WebSocket)

WebSocket 是 HTML5 新增的一种在单个 TCP 连接上进行全双工通讯的协议,与 HTTP 协议没有太大关系....

23020
来自专栏数据库新发现

Use Orastress! to test your database

http://www.eygle.com/special/Use.Orastress.2.Test.Oracle.db.htm

10220
来自专栏IT杂记

Linux主机之间ssh免密登录配置

修改ssh配置 每台linux主机修改配置文件/etc/ssh/sshd_config RSAAuthentication yes PubkeyAuthenti...

313100
来自专栏代码拾遗

Spring Boot 2.0 教程 - 日志详解

Spring Boot 内部使用commons logging 作为日志输出工具,同时也可以配置其他的工具例如,Java Logging,Log4j2,log...

18440
来自专栏菩提树下的杨过

oracle 11g 查看服务端/客户端编码,及修改db编码

oracle 如果server与client端的编码不一致,asp.net读取db记录显示时,就可能出现乱码 查看oracle服务端编码:select * fr...

236100
来自专栏运维技术迷

crontab执行python脚本提示ImportError解决方法

早上看到hadoop的计算结果没有进入到mysql数据库,查看关于hadoop计划任务的输出日志发现有报错信息。果断拿来手动执行相关的python脚本,并没有错...

39250
来自专栏乐沙弥的世界

MySQL "Bind on TCP/IP port: Address already in use"

   最近在已部署MySQL Enterprise Monitor的服务器上新增了MySQL实例,导致MySQL Enterprise Monitor异常宕机...

12910

扫码关注云+社区

领取腾讯云代金券