PHP手机号码归属地查询代码(API接口/mysql)
首先我们介绍使用自己的数据库查询多个手机号码,那还是建议你拥有一个自己的的手机号码数据库。正常情况下,只是满足一般查询的话,你不需要去购买专业版的手机号码数据库,增加无谓成本。我免费为你提供一个ACCESS数据库,包含17万多条数据,常用的130-139、150-159以及180-189开头手机号码段都在其中,你可以借助数据库工具轻松地将它转换成MYSQL或其它版本数据库
最新手机号码数据库下载地址:http://www.111cn.net/down/phone-number-database.rar
PHP+MYSQL手机号码归属地查询实现方法
通过上面的介绍,我们已经有了自己的MYSQL数据表。这个表结构很简单:ID(序号),code(区号),num(手机号码段),cardtype(手机卡类型),city(手机号码归属地)。注意,这个表存储数据量很大,应当根据你的sql查询语句,建立合适的索引字段,以提高查询效率。
1)获取手机号码归属地,我们只需要通过判断手机号码段归属地即可。主要通过以下函数实现,其中GetAlabNum、cn_substr、str_replace都是字符串操作函数,$dsql是数据库操作类。
代码如下 | 复制代码 |
function GetTelphone($tel) { global $city,$dsql; if(isset($tel)) $tel = GetAlabNum(trim($tel));//GetAlabNum函数用于替换全角数字,将可能存在的非法手机号码转换为数字;trim去除多余空格。 else return false; if(strlen($tel) < 7) return false; $tel = cn_substr($tel, 11);//先截取11个字符,防止是多个手机号码 //if(!is_numeric($tel)) return false; if(cn_substr($tel, 1) == "0")//判断手机号码是否以0开头,这种情况可能会是座机号以0开头 { if(cn_substr($tel, 2) == "01" || cn_substr($tel, 2) == "02") $tel = cn_substr($tel, 3);//3位区号 else $tel = cn_substr($tel, 4); $row = $dsql->GetOne(" Select code,city as dd from `#@__tel` where code='$tel' group by code "); } else { $tel = cn_substr($tel, 7); $row = $dsql->GetOne(" Select num,city as dd from `#@__tel` where num='$tel' "); } $city = $row['dd']; if($city) { $city = str_replace("省", "-", $city); $city = str_replace("市", "", $city); $city = "<br /><font color="green">[".$city."]</font>"; return $city; } } |
api实现方法,这里不需要自己的数据库但有限制了
主要使用curl实现,需要开启php对curl的支持。
代码如下 | 复制代码 |
<?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> |
与php mysql手机号码归属地查询这个会慢很多,毕竟要通过第三方法数据。
PHP 批量替换相对地址为绝对地址实现代码 有需要的朋友可参考一下。代码如下 | 复制代码 |
<?php //替换后的内容,和上面的匹配规则一一对应 /** /** FileUtil::copyDir("resource","cloud",true); ?> |
代码如下 | 复制代码 |
var http_request=false; function send_request(url){//初始化,指定处理函数,发送请求的函数 http_request=false; //开始初始化XMLHttpRequest对象 if(window.XMLHttpRequest){//Mozilla浏览器 http_request=new XMLHttpRequest(); if(http_request.overrideMimeType){//设置MIME类别 http_request.overrideMimeType("text/xml"); } } else if(window.ActiveXObject){//IE浏览器 try{ http_request=new ActiveXObject("Msxml2.XMLHttp"); }catch(e){ try{ http_request=new ActiveXobject("Microsoft.XMLHttp"); }catch(e){} } } if(!http_request){//异常,创建对象实例失败 window.alert("创建XMLHttp对象失败!"); return false; } http_request.onreadystatechange=processrequest; //确定发送请求方式,URL,及是否同步执行下段代码 http_request.open("GET",url,true); http_request.send(null); } //处理返回信息的函数 function processrequest(){ if(http_request.readyState==4){//判断对象状态 if(http_request.status==200){//信息已成功返回,开始处理信息 document.getElementById(reobj).innerHTML=http_request.responseText; } else{//页面不正常 alert("您所请求的页面不正常!"); } } } function dopage(obj,url){ document.getElementById(obj).innerHTML="正在读取数据..."; send_request(url); reobj=obj; } |
内容我放在一个div中显示,当翻页动作产生时,利用AJAX更新DIV达到翻页效果这是内容显示页面代码:
代码:
代码如下 | 复制代码 |
<?php $db=mysql_connect("localhost","root","7529639"); //创建数据库连接 /* $result=mysql_query("select * from cr_userinfo"); $url='test.php';//获取本页URL //页码计算 //开始分页导航条代码: //如果只有一页则跳出函数: $pagenav.=" <a href=javascrīpt:dopage('result','$url?page=1');>首页</a> "; //假如传入的页数参数大于总页数,则显示错误信息 $info=mysql_query("select * from cr_userinfo limit $offset,$num"); //获取相应页数所需要显示的数据 ?> |
php中的异常机制,只能算是一个舶来品,php的书中对异常机制讨论的很少,大多仅停留在语法阶段。有人盛赞php的异常是个好东西,也有人认为php的异常很不给力,也有人一直困惑在php中该不该用异常,怎么用?
异常本身的语法并不值得讨论,异常的使用场景才是主要的,这里我对比php和java,来看看php里的异常到底是怎么回事,异常到底应该怎么用。
看到了PPC论坛上的这篇讨论,觉得很有价值,我重新整理了下我的观点,做个总结。
首先,需要说的是,这里的异常是指php的异常。因为php的异常和其它语言相比有着很大的不同。
php里的异常,是程序运行中的不符合预期的情况,即一种在程序执行流程里面允许发生,只是和正常流程不同的状况。它是一种不正常的情况,就是按照我们的正常逻辑本不该出错,但仍然会出现的错误,属于逻辑和业务流程的错误,而不是语法上的错误。
php里的错误则是一种非法的,语法或者环境问题导致的让编译器无法通过检查,甚至无法运行的情况。
php的异常处理所做的是对你程序运行时出现的某种情况进行处理,并不是错误,异常是程序运行得到的结果不是你想要的。对于程序而言,异常是不可控的,我们无法控制运行时在哪个环节会出错,但是我们可以大致预期到哪些环节会出错,并进行针对性的补救。
异常(exception)和错误(error)的概念以及区分在各种语言里是不一样的。在java和php里,对错误和异常的界定也是不同的。在php里,它遇到任何的自身错误都会触发一个错误,而不是抛异常(对于一些情况,会同时抛出异常和错误)。php一旦遇到非正常的代码,通常都会触发错误,而不是抛出异常。在这个意义上,如果你想使用异常来处理不可预料的问题,是办不到的。比如说,你想在文件不存在,数据库连接打不开的时候触发异常,是不可行的。这在php里是一种错误,php把它作为错误抛出,而无法作为异常自动捕获。而java则不同,java把很多行为看成是异常并且可捕获。
我们来个最直观最简单的例子吧。就以经典的除零问题为例:
代码如下 | 复制代码 |
//exception.php <?php $a=null; try{ $a=5/0; echo $a,PHP_EOL; }catch(exception $e){ $e->getMessage(); $a=-1; } echo $a; |
运行结果:
下面是java代码:ExceptionTry.java
代码如下 | 复制代码 |
//ExceptionTry.java public class ExcepetionTry { public static void tp() throws ArithmeticException{ int a; a=5/0; System.out.println("运算结果:"+a); } public static void main(String[] args) { int a; try { a=5/0; System.out.println("运算结果:"+a); } catch (ArithmeticException e) { e.printStackTrace(); }finally{ a = -1; System.out.println("运算结果:"+a); } try { ExcepetionTry.tp(); } catch (Exception e) { System.out.println("异常被捕获"); } } } |
运行结果:
如果我们把tp方法中的第二条语句改为如下:
a=5/1;
那么结果将是如下:
由以上运行结果可以看到,对于除0这种“异常”代码,php认为这是一个错误,会直接触发错误(waring也是错误,只是错误等级不一样而已),而不会自动抛异常使进入异常流程,故最终$a的值并不是预想中的-1,也就是说,并没有进入异常分支,也没有处理异常。php只有你主动throw后,才能捕获异常(一般情况是这样的,也有一些异常php可以自动捕获)。
在下面三种场景下会用到异常处理机制:
(1)对程序的悲观预测
如果一个程序员对自己的代码带有“悲观情绪”,这里并不是指该程序员代码质量不高。他认为自己的代码无法一一处理各种可预见的不可预见的情况,那该程序员就会进行异常处理。假设一个场景,程序员悲观地认为自己的这段代码在高并发条件下可能产生死锁,那么他就会悲观地抛出异常,然后在死锁时进行捕获,对异常进行细致的处理。
(2)程序的需要和对业务的关注
如果程序员希望业务代码中不会充斥大堆的打印,调试等处理,通常他们会使用异常机制;或者业务上需要定义一些自己的异常,这个时候就需要自定义一个异常, 来对现实世界中各种各样的业务进行补充。比如上班迟到,这种情况,我就认为是一个异常,要收集起来,到月底集中处理,扣你工资;如果程序员希望有预见性地处理可能发生的会影响正常业务的代码,那么它需要异常。在这里,强调了异常是业务处理中必不可少的环节,不能对异常视而不见。异常机制认为,数据一致很重要,在数据一致性可能被破坏时,就需要异常机制来进行预先补救。
举个例子,比如有个上传文件的业务需求,要把上传的文件保存在一个目录里,并在数据库里插入这个文件的记录,那么这两步就是互相关联密不可分的一个集成的业务,缺一不可。文件保存失败,而插入记录成功就会导致无法下载文件;而文件保存成功数据库写入失败,则会导致没有记录的文件成为死文件,永远得不到下载。
那么我们假设文件保存成功后没有提示,但是保存失败会自动抛出异常,访问数据库也一样,插入成功没有提示,失败则自动抛出异常,我们就可以把这两个有可能抛出异常的代码段包在一个try语句里,然后在catch捕捉错误,在catch代码段里删除没有被记录到数据库的文件或者删除没有文件的记录,以保证业务数据的一致性。 因此,从业务这个角度讲,异常偏重于保护业务数据一致性,并且强调了对异常业务的处理。
如果我们的代码中,只是象征性的try-catch,最后打印一个报错,over。这样的异常,不如不用,没有体现了异常的思想。所以,合理的代码应该如下:
代码如下 | 复制代码 |
<?php try{ //可能出错的代码段 if(文件上传不成功) throw(上传异常); if(插入数据库不成功) throw(数据库操作异常);}catch(异常){ 必须的补救措施,如删除文件,删除数据库插入记录,这个处理很细致 } //.... ?> |
也可以如下:
代码如下 | 复制代码 |
<?php 上传{ if(文件上传不成功) throw(上传异常); if(插入数据库不成功) throw(数据库操作异常); } //其他代码...try{ 上传; 其他; }catch(上传异常){ 必须的补救措施,如删除文件,删除数据库插入记录 }catch(其它异常){ 记录log } ?> |
上面的两种捕获异常的方式,前一种是在异常发生时,立刻捕获;后一种是分散抛异常,集中捕获。那到底应该是哪一种呢?
如果我们的业务很重要,那么异常越早处理越好,以保证程序在意外情况下能保持业务处理的一致性。比如一个操作有多个前提步骤,突然最后一个步骤异常了,那么其他前提操作都要消除掉才行,保证数据一致性。并且在这种核心业务下,有大量的代码来做善后工作,进行数据补救,这是一种比较悲观的异常。
如果我们的异常不是那么重要,并且在单一入口,MVC风格的应用中,为了保持代码流程的统一,则常常采用后一种异常处理方式,这种异常处理更多强调了业务流程的走向,对善后工作并不是很关心。这是一种乐观的异常。
(3)语言级别的健壮性要求
在这点上,php是缺失的。以java为例,java是一种面向企业级开发的语言,强调健壮性。java中支持多线程,java认为,多线程被中断这种情况是彻彻底底的无法预料和避免的。所以 java规定,凡是用了多线程,就必须正视这种情况。你要么抛出,不管它,要么捕获,进行处理。总之,你必须面对 InterruptedException这个异常,不准回避。也就是异常发生后应对重要数据业务进行补救,当然你可以不做,但是我会告诉你,这是你应该做的。 这类异常是强制的。更多的异常是非强制的,由程序员决定的。java对异常的这种分类和约束,保证了java程序的健壮性和可信赖度。
那么异常的意义何在?
异常就是无法控制的运行时错误,会导致出错时中断正常逻辑运行,该异常代码后面的逻辑都不能继续运行。那么try/catch的好处就是可以把异常造成的逻辑中断破坏降到最小范围内,并且经过补救处理措施后不影响业务逻辑的完整性,乱抛异常和只抛不捕获,或捕获而不补救,会导致数据混乱。 这就是异常处理的一个重要作用,就是在我们精确控制运行时流程的时候,在程序中断的时候,有预见的用try缩小可能出错的影响范围,再及时捕获异常的发生并作出相应的补救,以使逻辑流程仍然能回到正常轨道上来。
怎样看php的异常?
我们已经看到了php中的异常机制是很鸡肋的,绝大多数情况下无法自动抛异常,必须用if-else来先进行判断,再手工抛出异常。这种处理方式看起来,比较像是多此一举。手动抛异常的意义就不是很大了,因为你手动抛异常也就意味着你在代码里已经充分预期到错误的出现了,也就算不得真正的“异常”了,而是意料之中的了。还是陷入了纷繁复杂的业务逻辑判断和处理中。java和C++语言做的比较好的就是定义了一堆内置的常见的异常,不需要程序员判断各种异常情况后手工抛出,编译器会代我们进行判断业务是否发生错误,自动抛出异常。作为程序员,则只需要关心异常的捕获和随后补救,而不是像php中关注到底会发生哪些异常啊,用if-else来逐一判断,逐一抛异常。
php的异常机制很不完美,很多情况下和if-else相比没有明显的优势,这也是php的异常没有普及的原因。当然了,使用了异常也能一定程度上降低耦合性。
那怎么来完善php原先的异常处理机制呢?这时,就要借助php的错误处理了。PHP提供了一个set_error_handler函数,可以自定义错误处理函数,能够把非致命类型的错误处理都转向到自己定义的函数里进行分析和处理。但是因为出错的地方可能很多,集中处理的话要区分的情况很复杂,所以我们只用这个特性做个跳板。在自定义函数里我们手动抛一个异常出来,杀个回马枪,让try/catch可以捕获并处理这个运行时错误所带来的中断,从而实现扩大try/catch影响范围的目的.
正则表达式提取网址中的id
代码如下 | 复制代码 |
preg_match('/http://t.sina.com.cn/(d+)/fans//',$html,$result); 正则表达式提取网址中的id echo $result[1]; |
PHP的正则表达式提取图片地址的代码。
代码如下 | 复制代码 |
$str='<p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"><img border="0" src="upfiles/2009/07/1246430143_4.jpg" alt=""/></p><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"><img border="0" src="upfiles/2009/07/1246430143_3.jpg" alt=""/></p><p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"><img border="0" src="upfiles/2009/07/1246430143_1.jpg" alt=""/></p>'; $pattern="/<[img|IMG].*?src=['|"](.*?(?:[.gif|.jpg]))['|"].*?[/]?>/"; preg_match_all($pattern,$str,$match); print_r($match); |
PHP正则表达式提取超链接及其标题
代码如下 | 复制代码 |
$str = '<a id="top8" href="http://list.MP3.baidu.com/song/A.htm?top8" class="p14" target="_top">歌曲列表</a><br><a target="_blank" id="bp" href="http://list.mp3.baidu.com/list/bangping.html" class="p14">中文金曲榜</a><br><td nowrap="nowrap">• <a id="top19" href="qingyinyue.html?top19" class="p14" target="_top">轻音乐</a></td>'; 利用正则表达式是最简单的,其它的办法,偶米去想。。。 $pat = '/<a(.*?)href="(.*?)"(.*?)>(.*?)</a>/i'; 输出方法: print_r($m[2]); |
相关文章
- 这篇文章主要介绍了c# 三种方法调用WebService接口的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-07
- 这篇文章主要介绍了vue接口请求加密实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-12
- 怎么查询自己的联通手机号码是否已经实名认证?现在手机一批一批的开始实名制了,自己的手机号买的时候没有实名认证,怎么才能知道自己的手机是否被知名认证了呢?认证以后就不能充话费打电话了,下面我们们一起来看看两种查看方法...2016-07-04
- 这篇文章主要介绍了SpringBoot接口接收json参数解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-19
- 这篇文章主要介绍了C#简单了解接口(Interface)使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-08
- 这篇文章主要介绍了Feign接口方法返回值设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-08
- 这篇文章主要介绍了C# Rx的主要接口深入理解的相关资料,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了vue设置全局访问接口API地址操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-14
- 这篇文章主要介绍了微信小程序开发之获取用户手机号码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-18
- 在日常开发中,总会接触到各种接口,前后端数据传输接口,第三方业务平台接口,下面这篇文章主要给大家介绍了关于如何设计一个安全的API接口的相关资料,需要的朋友可以参考下...2021-08-12
- php怎么写api接口?本文介绍了php写api接口的实例代码,有兴趣的同学可以参考一下。 http://localhost/openUser.php?act=get_user_list&type=json在这里openUser.php...2017-07-06
- 这篇文章主要介绍了vue配置多代理服务接口地址操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-08
- 下面通过四步给大家介绍了c#处理和对接http接口请求的方法,分步骤介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看下吧...2020-06-25
javascript 手机号码正则表达式验证函数 <font color=red>原创</font>
随着手机号码段的不断增加,以前网上的手机号码验证函数都不能那么完美的支持了,这里脚本之家编辑特为大家准备的一个简单的正则与手机验证的函数分析。...2021-05-07- 这篇文章主要介绍了Java接口DAO模式代码原理及应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-03
- 这篇文章主要介绍了C#实现两接口中同名方法,涉及C#接口与方法的相关操作技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了c#接口使用的实例,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-17
- 这篇文章主要介绍了SpringData Repository接口用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-27
- 这篇文章主要介绍了微信小程序通过api接口将json数据展现到小程序示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-01-23
- 这篇文章主要介绍了详解c# 接口IDisposable的用法,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...2020-12-08