微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP实现查询手机归属地的方法详解

本文介绍的是PHP实现查询手机归属地的方法,首先来看看手机归属地查询的类图:

后台

MobileQuery类调用:

  • \libs\HttpRquest
  • \libs\ImRedis (未使用)

Api类调用 MobileQuery 类的 Query 方法来返回 $response 的数据,并进行加工。

前台

base.js 使用 .ajax 请求,并将请求后的数据填充到index.html 中。

核心代码展示

AutoLoad.PHP

rush:PHP;"> PHP /** * Todo Auto-generated comment. */ class AutoLoad {

/**

  • Todo Auto-generated comment.
    */
    public static function load($className)
    {
    //命名空间的反斜杠替代
    $filename = sprintf('%s.PHP',str_replace('\','/',$className));
    require_once($filename);
    }
    }
    spl_autoload_register(['AutoLoad','load']);

Api.PHP

rush:PHP;">
  • TODO Auto-generated comment.
    */
    require_once "AutoLoad.php";
    use \app\MobileQuery;
    class Api{
    private $response;
    private $params;
    private $phone;
    public function __construct(){
    $this->params = $_POST;
    if(isset($this->params['tel'])) {
    $this->phone = $this->params['tel'];
    }else {
    $this->phone = '17706436202';
    }
    $this->queryResponse($this->phone);
    }
    public function queryResponse($phone) {
    $this->response = MobileQuery::query($phone);
    if(is_array($this->response) and isset($this->response['province'])) {
    $this->response['phone'] = $phone;
    $this->response['code'] = 200;
    } else {
    $this->response['phone'] = $phone;
    $this->response['msg'] = '手机号码错误';
    }
    }
    public function getResponse()
    {
    return json_encode($this->response);
    }
    }
    $Api = new Api();
    echo $Api->getResponse();
  • app/MobileQuery.PHP

    rush:PHP;">
  • TODO Auto-generated comment.
    */
    namespace app;
  • use libs\HttpRequest;
    use libs\ImRedis;

    class MobileQuery {
    /**

    public static function query($phone)
    {
    $phoneData = null;
    if(self::varifyPhone($phone)){
    $response = HttpRequest::request(self::PHONE_API,['tel'=>$phone]);
    $phoneData = self::formatData($response);
    $phoneData['msg'] ='数据由Cizel的博客提供';
    }
    return $phoneData;
    }

    public static function formatData($data)
    {
    $ret = null;
    if(!empty($data)){
    preg_match_all("/(\w+):'([^']+)/",$data,$res);
    $items = array_combine($res[1],$res[2]);
    foreach ($items as $itemKey => $itemVal) {
    $ret[$itemKey] = iconv('GB2312','UTF-8',$itemVal);
    }
    }
    return $ret;
    }

    public static function varifyPhone($phone)
    {
    if(preg_match("/^1[34578]{1}\d{9}/",$phone)) {
    return true;
    } else {
    return false;
    }
    }
    }

    lib/HttpRequest.PHP

    rush:PHP;"> PHP /** * Todo Auto-generated comment. */ namespace libs;

    class HttpRequest {

    /**

    • Todo Auto-generated comment.
      */
      public static function request($url,$params =[],$method='GET')
      {
      $ret = null;
      if(preg_match("/^(http|https)\:\/\/(\w+.\w+.\w+)/",$url)) {
      $method = strtoupper($method);
      if($method == 'POST') {
      exit('nothing to do.');
      } else {
      if($params) {
      if(strripos('?',$url)) {
      $url = $url . '&' . http_build_query($params);
      } else {
      $url = $url . '?' . http_build_query($params);
      }
      }
      $ret = file_get_contents($url);
      }
      }
      return $ret;
      }
      }

    statis/js/base.js

    rush:js;"> /*
  • @Author: Cizel
  • @Date: 2016-04-11 16:53:52
  • @Last Modified by: Cizel
  • @Last Modified time: 2016-04-11 17:22:32
    */
  • $(document).ready(function(){
    $('#query').click(function(){
    var phone = $('#phone_num').val();
    //alert(phone);
    if (phone.length == 11) {
    Cizel.GLOBAL.AJAX('Api.PHP','post',{'tel':phone},'json',Cizel.APPS.QUERYPHONE.AJAXCALLBACK);
    }
    });
    });

    var Cizel = Cizel || {};
    Cizel.GLOBAL = {};
    Cizel.APPS = {};

    Cizel.APPS.QUERYPHONE = {};
    Cizel.APPS.QUERYPHONE.AJAXCALLBACK = function(data){
    if(data.code == 200){
    Cizel.APPS.QUERYPHONE.SHOWINFO();
    $('#phoneNumber').text(data.phone);
    $('#phoneProvince').text(data.province);
    $('#phoneCatName').text(data.catName);
    $('#phoneMsg').text(data.msg);
    } else {
    Cizel.APPS.QUERYPHONE.HIDEINFO();
    }
    };
    Cizel.APPS.QUERYPHONE.SHOWINFO = function(){
    $('#phoneInfo').show();
    }
    Cizel.APPS.QUERYPHONE.HIDEINFO = function(){
    $('#phoneInfo').hide();
    }

    Cizel.GLOBAL.AJAX = function(url,method,params,dataType,callBack)
    {
    $.ajax({
    url: url,type: method,data: params,dataType: dataType,success:callBack,error:function(){
    alert('请求异常');
    }

    });
    };

    感悟

    通过完成这个实例,感觉自己对 PHP 面向对象的编写有了新的理解,同时 JavaScript 的编写能力需要加强。

    好了,以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程之家的支持

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

    相关推荐