本文章总结了两个常用的手机归属地查询程序,一种是利用api调用第三方接口实现,一种是利用我们自己的手机数据库查询然后再判断手机号归属地查询.
先来看一个调用第三方法网站的一个程序
主要使用curl实现,需要开启php对curl的支持.
如果你是windows系统在你的的php.ini文件的设置,找到php_curl.dll,并取消前面的分号注释就行了,如下所示:
//取消下在的注释
extension=php_curl.dll
如果您是在Linux下面,那么,您需要重新编译您的PHP了,编辑时,您需要打开编译参数,在configure命令上加上“–with-curl”参数。
然后重启apache
<?php header("Content-Type:text/html;charset=utf-8"); if (isset($_GET['number'])) { $url = 'http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo'; $number = $_GET['number']; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, "mobileCode={$number}&userId="); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); $data = simplexml_load_string($data); if (strpos($data, 'http://')) { echo '手机号码格式错误!'; } else { echo $data; } } ?> <form action="mobile.php" method="get"> 手机号码: <input type="text" name="number" /> <input type="submit" value="提交" /> </form>
实例二
这个实例利用了手机数据库,把文件保存在本地然后查找数据库再来差别,但是你得经常更新数据库才行哦。
<html> <head> <title>手机号码归属地查询</title> </head> <style type="text/css"> #main{ height:100%; } #left { float:left; height:100%; width:10%; float:left; } #right{ float:left; height:100%; width:100$; } </style> <body> <?php require ('function.php'); $pwd="xiaolin"; //密码,请修改 if (!isset($_GET["action"]) ){ header("Location:manage.php?action=login"); } if ($_GET["action"]=="login"){ ?> <form action="manage.php?action=loginin" method="POST"> <p>请输入密码:</p> <p><input type="password" value="" name="pwd"></p> <p><input type="submit" value="登录"></p> </form> <?php }elseif ($_GET["action"]=="loginin"){ $repwd=$_POST["pwd"]; if ($repwd != $pwd){ echo "Sorry,密码错误~!"; }else { $_SESSION["flag"]=true; leftnav(); } }elseif ($_GET["action"]== "info" ){ leftnav(); getinfo(); ?> </div> </div> <?php }elseif ($_GET["action"]=="edit"){ leftnav(); ?> <form action="manage.php?action=editp" method="POST"> <p>手机号码:<input type="text" name="num">(至少7位)</p> <p>详细资料:<input type="text" name="info"></p> <input type="submit" value="更新"> </form> <?php }elseif ($_GET["action"]== "loginout"){ if (isset($_SESSION["flag"])){ unset($_SESSION["flag"]); session_destroy(); } echo "<p><a>登出</a></p><p><a href='manage.php'>返回</a></p>"; }elseif ($_GET["action"]=="editp"){ leftnav(); $num=$_POST["num"]; $info=$_POST['info']; if (!empty($num) && !empty($info) && strlen($num)>=7 ){ update($num,$info); }else{ die ("不得为空!"); } }elseif ("about"==$_GET["action"]){ leftnav(); showabout(); } ?> </body> </html> index.php <html> <head> <title>手机号码归属地查询</title> </head> <body> <form action="index.php?action=search" method="POST"> <p>请输入你要查询的手机号码:<input type="text" name="phone"></p> <p><input type="submit" value="查询手机号码归属地"></p></p> </form> <?php if (isset($_GET["action"])){ if ("search"==$_GET["action"] ){ require ('function.php'); $phone=(isset($_POST["phone"]))?$_POST["phone"]:die ("请返回"); echo "你查询的手机号码<font color=red>".$phone."</font>属于<font color=red>".getphone($phone)."</font>"; } } ?> </body> </html> function.php函数 <?php session_start(); function update($num,$info){ $dbpath="xiaolin/"; $len=strlen($num); if ( $len < 7 ){ return "手机号码最低7位哦"; } $par="[0-9]"; for ($i=0;$i<$len;$i++){ if(!ereg($par,substr($num,$i,1) ) ){ return "手机号码只能为数字"; } } $sunum=scandir($dbpath); //得到支持的手机号码前缀 array_splice($sunum,0,1); //把当前目录取消 array_splice($sunum,0,1); //把上一级目录去掉 $sub=substr($num,0,3); //取得该号码的前三位 if (in_array($sub,$sunum) ){ $num1=ltrim(substr($num,3,4),"0"); $search=file($dbpath.$sub); $tmp=$search[$num1]; $search[$num1]=$num1.'='.$info."n"; $fp1=fopen($dbpath.$sub.'1','wb+'); for ($i=0;$i<10000;$i++){ //$phone=str_pad($i,4,"0",STR_PAD_LEFT); //$phoneinfo=""; //$phoneinfo.=$phone."="; //$phoneinfo=(isset($search[$i]))?$search[$i]:""; //$phoneinfo.="n"; fwrite($fp1,$search[$i]); } fclose($fp1); echo "$num 已更新"; }else{ die ("暂不支持$sub"); } } function getphone($phone){ $dbpath="xiaolin/"; $len=strlen($phone); if ( $len < 7 ){ return "手机号码最低7位哦"; } $par="[0-9]"; for ($i=0;$i<$len;$i++){ if(!ereg($par,substr($phone,$i,1) ) ){ return "手机号码只能为数字"; } } $sunum=scandir($dbpath); //得到支持的手机号码前缀 array_splice($sunum,0,1); //把当前目录取消 array_splice($sunum,0,1); //把上一级目录去掉 $sub=substr($phone,0,3); //取得该号码的前三位 if (in_array($sub,$sunum) ){ $num=ltrim(substr($phone,3,4),"0"); $search=file($dbpath.$sub); $tmp=$search[$num]; $result=substr($tmp,strpos($tmp,"=")+1,strlen($tmp)-strpos($tmp,"=")-2); //处理数据 return (strlen($result)>1)?$result:"无数据"; }else{ return "暂不支持$sub"; } } function check(){ if (!isset($_SESSION["flag"]) ){ die ("<p>请<a href='manage.php?action=login'>登录!</a></p>"); }elseif ($_SESSION["flag"] != true){ die ("<p>请<a href='manage.php?action=login'>登录!</a></p>"); } } function getinfo(){ check(); $nums=array("130","131","132","133","134","135","136","137","138","139","150","151","153","155","156","157","158","159"); $counts=""; for($j=0;$j<count($nums);$j++){ $id=$j; if ($id >= count($nums) ){ die ("OVER"); } $nownum=$nums[$id]; //当前的号码段 $dbpath="xiaolin/"; $fp=fopen("xiaolin/$nownum",'r'); while(!feof($fp)){ $line=fgets($fp); $tmp=explode("=",$line); $num1[$tmp[0]]=substr($line,strpos($line,"=")+1,strlen($line)-strpos($line,"=")-2); } fclose($fp); $flag=0; for($i=0;$i<10000;$i++){ $ser=str_pad($i,4,"0",STR_PAD_LEFT); if(!strlen($num1[$ser]) ==0 ){ ++$flag; } } $counts+=$flag; echo "$nownum:段记录$flag</p>"; } echo "总计$counts";} function leftnav(){ check(); ?> <div> <div id="right"> <?php } function showabout(){ echo "<p>手机号码归属地查询</p> "; } ?>
评论回复