为了账号安全,请及时绑定邮箱和手机立即绑定

PHP实现手机归属地查询

帅进超 软件工程师
难度中级
时长 1小时10分
学习人数
综合评分9.57
68人评价 查看评价
9.7 内容实用
9.4 简洁易懂
9.6 逻辑清晰
  • index.html <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>手机归属地查询</title> <script src="static/js/jquery.min.js"></script> <script src="static/js/base.js"></script> <link rel="stylesheet" href="static/css/bootstrap.min.css"/> <link rel="stylesheet" href="static/css/flat-ui.css"/> <style> body {max-width: 720px;margin: 0 auto;} .top-20 {margin-top: 20px;} .table-width {margin-left: 20px;width: 95%;} #info {display: none;} </style> </head> <body> <div class="row top-20"> <div class="col-xs-9"> <input type="text" id="phone-num" class="form-control"/> </div> <div class="col-xs-3"> <button class="btn btn-lg btn-block btn-primary" id="query">查询</button> </div> </div> <div class="row top-20" id="info"> <table class="table table-width table-responsive"> <tr><th>手机号码</th><td id="query-tel">15933643352</td></tr> <tr><th>归属地</th><td id="query-pro">北京</td></tr> <tr><th>运营商</th><td id="query-cat">中国移动</td></tr> <tr><th>其他</th><td id="query-other">慕课网</td></tr> </table>
    查看全部
  • 如果通过
    查看全部
  • QueryPhone.php <?php namespace app; use libs\ImHttpRequest; use libs\ImRedis; class QueryPhone{ //定义hash的key const CACHE_KEY = 'PHONE:INFO'; public static function query($phone){ $ret = []; if (self::verifyPhone($phone)){ $redisKey = substr($phone,0,7); $phoneInfo = ImRedis::getRedis()->hGet(self::CACHE_KEY,$redisKey);//从数据库中读取数据 if ($phoneInfo) { $ret = json_decode($phoneInfo,true);//如果$phoneInfo为真就转化为数组,true要写上,不然会转化为对象 $ret['msg'] = '由慕课网提供数据'; }else{ $response = ImHttpRequest::request(self::TAOBAO_API,['tel'=>$phone]); $data = self::formatData($response); if ($data) { $json = json_encode($data);//把数组转化为JSON格式 ImRedis::getRedis()->hSet(self::CACHE_KEY,$redisKey,$json);//把数据写到数据库中 $data['msg'] = '由阿里巴巴提供数据'; $ret = $data; } } } return $ret; } } api.php <?php require_once "autoload.php"; $info = app\QueryPhone::query('13987654321'); var_dump($info); 刷新浏览器 (从数据库中读取数据) msg = 由慕课网提供数据 修改api.php里的电话号码 $info = app\QueryPhone::query('13623323388'); 第一次刷新浏览器 (从淘宝API获取数据) msg = 由阿里巴巴提供数据
    查看全部
  • QueryPhone.php <?php namespace app; use libs\ImHttpRequest; use libs\ImRedis; class QueryPhone{ //定义hash的key const CACHE_KEY = 'PHONE:INFO'; public static function query($phone){ if (self::verifyPhone($phone)){ $redisKey = substr($phone,0,7); $response = ImHttpRequest::request(self::TAOBAO_API,['tel'=>$phone]); $data = self::formatData($response); if ($data) { $json = json_encode($data);//把数组转化为JSON格式 ImRedis::getRedis()->hSet(self::CACHE_KEY,$redisKey,$json);//把数据写到数据库中 } } } } 刷新浏览器 cmd keys * "PHONE:INFO" 这个key已经写进去了 hgetall PHONE:INFO 1) "1398765" 号段的信息也已写进去
    查看全部
  • QueryPhone.php <?php namespace app; use libs\ImHttpRequest; use libs\ImRedis; class QueryPhone{ //定义hash的key const CACHE_KEY = 'PHONE:INFO'; public static function query($phone){ if (self::verifyPhone($phone)){ $redisKey = substr($phone,0,7); $response = ImHttpRequest::request(self::TAOBAO_API,['tel'=>$phone]); $data = self::formatData($response); if ($data) { $json = json_encode($data);//把数组转化为JSON格式 //var_dump($json);//打印出来返回false[编码问题,需要把GBK转换为Unicode] } } } public static function formatData($data = null){ $ret = false; if ($data) { preg_match_all("/(\w+):'([^']+)/",$data,$res);//用正则把数据匹配出来 //3-4 缓存数据到数据库(转换编码,把GBK转换为Unicode) $items = array_combine($res[1],$res[2]); foreach ($items as $key => $val) { $ret[$key] = iconv('GB2312', 'UTF-8', $val); } } return $ret; } }
    查看全部
  • libs/ImRedis.php <?php /** * 获取Redis数据库句柄 */ namespace libs; class ImRedis{ private static $redis; public static function getRedis(){ //如果$redis不是\Redis的对象的话 if (!(self::$redis instanceof \Redis)) { self::$redis = new \Redis();//重新初始化一下 self::$redis->connect('127.0.0.1',6379);//连接redis } return self::$redis; } } 测试redis模块能不能用 cmd cd D:\redis\redis-2.6 set name imooc get name QueryPhone.php <?php namespace app; use libs\ImHttpRequest; use libs\ImRedis; class QueryPhone{ public static function query($phone){ if (self::verifyPhone($phone)){ //测试是否能打印出来$name $name = ImRedis::getRedis()->get('name'); var_dump($name); die; } } }
    查看全部
  • 3-4 缓存数据到数据库 cmd cd D:\redis\redis-2.6(需切换到redis根目录) redis-server.exe redis.conf #启动redis数据库服务 redis-cli.exe -h 127.0.0.1 -p 6379 #设置redis的IP地址和端口 set key1 helloredis #创建一条数据(key-value) get key1 #获取数据(key) redis-cli #查看redis是否启动 keys * #查看所有的数据 flushdb #清空数据库
    查看全部
  • 3-3 格式化数据 QueryPhone.php namespace app; use libs\ImHttpRequest; class QueryPhone{ //3-2 API请求数据 const TAOBAO_API = 'https://tcc.taobao.com/cc/json/mobile_tel_segment.htm'; public static function query($phone){ //var_dump($phone); //3-1 校验手机号码合法性 //var_dump(self::verifyPhone($phone)); //3-2 API请求数据 if (self::verifyPhone($phone)){ $response = ImHttpRequest::request(self::TAOBAO_API,['tel'=>$phone]); //var_dump($response); //3-3 格式化数据 //self::formatData($response);//调用formatData方法 $data = self::formatData($response); if ($data) { var_dump($data); } } } /** * 3-3 格式化API请求回来的数据 * @param null $data * @return array|bool */ public static function formatData($data = null){ $ret = false; if ($data) { preg_match_all("/(\w+):'([^']+)/",$data,$res);//用正则把数据匹配出来 //var_dump($res);//数据中的key和value分割为两组数组元素 $ret = array_combine($res[1],$res[2]);//合并key和value } return $ret; } }
    查看全部
    0 采集 收起 来源:格式化数据

    2018-03-22

  • 3-2 API请求数据 QueryPhone.php namespace app; use libs\ImHttpRequest; class QueryPhone{ //3-2 API请求数据 const TAOBAO_API = 'https://tcc.taobao.com/cc/json/mobile_tel_segment.htm'; public static function query($phone){ //3-2 API请求数据 if (self::verifyPhone($phone)){ $response = ImHttpRequest::request(self::TAOBAO_API,['tel'=>$phone]); var_dump($response); } } }
    查看全部
    0 采集 收起 来源:API请求数据

    2018-03-22

  • 3-2 API请求数据 <?php /** * HTTP请求模块 */ namespace libs; class ImHttpRequest{ public static function request($url, $params, $method = 'GET'){ $response = null;//定义默认的返回值为null if ($url){ $method = strtoupper($method);//全转换为大写 if ($method == 'POST'){ }elseif ($method == 'PUT'){ }elseif ($method == 'DELETE'){ }else{ if (is_array($params) and count($params)){ if (strrpos($url, '?')) { $url = $url . '&' . http_build_query($params); }else{ $url = $url . '?' . http_build_query($params); } //var_dump($url); $response = file_get_contents($url); } } } //var_dump($response);//需要开启php/php.ini中的openssl扩展 return $response; } }
    查看全部
    0 采集 收起 来源:API请求数据

    2018-03-22

  • QueryPhone.php public static function query($phone){ //3-1 校验手机号码合法性 var_dump(self::verifyPhone($phone)); } /** * 3-1 校验手机号码合法性 * @param null $phone * @return bool */ public static function verifyPhone($phone = null){ $ret = false;//默认为false if ($phone){ //正则匹配 if (preg_match('/^1[34578]{1}\d{9}/',$phone)){ $ret = true; } } return $ret; }
    查看全部
  • 框架结构
    查看全部
  • 2-3 信息查询流程解析 号码信息查询流程
    查看全部
  • 全局都使用了自动加载的机制 QueryPhone.php namespace app; class QueryPhone{ public static function test(){ //var_dump('imooc'); QueryIP::query(); } api.php app\QueryPhone::test(); app\QueryIP::query(); QueryIP.php namespace app; class QueryIP{ public static function query(){ var_dump('ip query'); } } 浏览器:http://127.0.0.1:9100/api.php
    查看全部
  • 自动加载方式 QueryPhone.php namespace app; class QueryPhone{ public static function query($phone){ var_dump($phone); } } api.php require_once "autoload.php"; app\QueryPhone::query('15987654321'); class autoload{ public static function load($className){ //$fileName = str_replace('\\','/',$className);//转义目录的/ $fileName = sprintf('%s.php',str_replace('\\','/',$className));//占位.php并转义/ //var_dump($fileName); if (is_file($fileName)) require_once $fileName;//如果结果打印出来了就证明加载成功了 } } //注册到spl的autoload里 spl_autoload_register(['autoload','load']); 浏览器:http://127.0.0.1:9100/api.php
    查看全部

举报

0/150
提交
取消
课程须知
学习本门课程之前,建议先了解一下知识,会更有助于理解和掌握本门课程 1、PHP基础知识 2、了解面向对象 3、对redis有一个基本了解
老师告诉你能学到什么?
1、合理规划框架结构 2、类库自动加载 3、项目流程分析 4、Redis基础应用

微信扫码,参与3人拼团

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!