php读取手机客户端浏览器的类库
此收藏的手机信息函数类有取手机号码,浏览器报头信息,取得手机类型,取得手机IP等功能。
代码如下 | 复制代码 |
<?php /** * 类名: mobile * 描述: 手机信息类 * 其他: 偶然 编写 */ class mobile{ /** * 函数名称: getPhoneNumber * 函数功能: 取手机号 * 输入参数: none * 函数返回值: 成功返回号码,失败返回false * 其它说明: 说明 */ function getPhoneNumber(){ if (isset($_SERVER[ 'HTTP_X_NETWORK_INFO '])){ $str1 = $_SERVER[ 'HTTP_X_NETWORK_INFO ']; $getstr1 = preg_replace( '/(.*,)(11[d])(,.*)/i ', '2 ',$str1); Return $getstr1; }elseif (isset($_SERVER[ 'HTTP_X_UP_CALLING_LINE_ID '])){ $getstr2 = $_SERVER[ 'HTTP_X_UP_CALLING_LINE_ID ']; Return $getstr2; }elseif (isset($_SERVER[ 'HTTP_X_UP_SUBNO '])){ $str3 = $_SERVER[ 'HTTP_X_UP_SUBNO ']; $getstr3 = preg_replace( '/(.*)(11[d])(.*)/i ', '2 ',$str3); Return $getstr3; }elseif (isset($_SERVER[ 'DEVICEID '])){ Return $_SERVER[ 'DEVICEID ']; }else{ Return false; } } /** * 函数名称: getHttpHeader * 函数功能: 取头信息 * 输入参数: none * 函数返回值: 成功返回号码,失败返回false * 其它说明: 说明 */ function getHttpHeader(){ $str = ' '; foreach ($_SERVER as $key=> $val){ $gstr = str_replace( "& ", "& ",$val); $str.= "$key -> ".$gstr. "rn "; } Return $str; } /** * 函数名称: getUA * 函数功能: 取UA * 输入参数: none * 函数返回值: 成功返回号码,失败返回false * 其它说明: 说明 */ function getUA(){ if (isset($_SERVER[ 'HTTP_USER_AGENT '])){ Return $_SERVER[ 'HTTP_USER_AGENT ']; }else{ Return false; } } /** * 函数名称: getPhoneType * 函数功能: 取得手机类型 * 输入参数: none * 函数返回值: 成功返回string,失败返回false * 其它说明: 说明 */ function getPhoneType(){ $ua = $this-> getUA(); if($ua!=false){ $str = explode( ' ',$ua); Return $str[0]; }else{ Return false; } } /** * 函数名称: isOpera * 函数功能: 判断是否是opera * 输入参数: none * 函数返回值: 成功返回string,失败返回false * 其它说明: 说明 */ function isOpera(){ $uainfo = $this-> getUA(); if (preg_match( '/.*Opera.*/i ',$uainfo)){ Return true; }else{ Return false; } } /** * 函数名称: isM3gate * 函数功能: 判断是否是m3gate * 输入参数: none * 函数返回值: 成功返回string,失败返回false * 其它说明: 说明 */ function isM3gate(){ $uainfo = $this-> getUA(); if (preg_match( '/M3Gate/i ',$uainfo)){ Return true; }else{ Return false; } } /** * 函数名称: getHttpAccept * 函数功能: 取得HA * 输入参数: none * 函数返回值: 成功返回string,失败返回false * 其它说明: 说明 */ function getHttpAccept(){ if (isset($_SERVER[ 'HTTP_ACCEPT '])){ Return $_SERVER[ 'HTTP_ACCEPT ']; }else{ Return false; } } /** * 函数名称: getIP * 函数功能: 取得手机IP * 输入参数: none * 函数返回值: 成功返回string * 其它说明: 说明 */ function getIP(){ $ip=getenv( 'REMOTE_ADDR '); $ip_ = getenv( 'HTTP_X_FORWARDED_FOR '); if (($ip_ != " ") && ($ip_ != "unknown ")){ $ip=$ip_; } return $ip; } } ?> |
以下是我分享的用PHP计算两个GPS经纬度坐标之间的距离的代码,有需要的朋友可以直接拿去用。
代码如下 | 复制代码 |
/** * 计算两个坐标之间的距离(米) * @param float $fP1Lat 起点(纬度) * @param float $fP1Lon 起点(经度) * @param float $fP2Lat 终点(纬度) * @param float $fP2Lon 终点(经度) * @return int */ function distanceBetween($fP1Lat, $fP1Lon, $fP2Lat, $fP2Lon){ $fEARTH_RADIUS = 6378137; //角度换算成弧度 $fRadLon1 = deg2rad($fP1Lon); $fRadLon2 = deg2rad($fP2Lon); $fRadLat1 = deg2rad($fP1Lat); $fRadLat2 = deg2rad($fP2Lat); //计算经纬度的差值 $fD1 = abs($fRadLat1 - $fRadLat2); $fD2 = abs($fRadLon1 - $fRadLon2); //距离计算 $fP = pow(sin($fD1/2), 2) + cos($fRadLat1) * cos($fRadLat2) * pow(sin($fD2/2), 2); return intval($fEARTH_RADIUS * 2 * asin(sqrt($fP)) + 0.5); } /** * 百度坐标系转换成标准GPS坐系 * @param float $lnglat 坐标(如:106.426, 29.553404) * @return string 转换后的标准GPS值: */ function BD09LLtoWGS84($fLng, $fLat){ // 经度,纬度 $lnglat = explode(',', $lnglat); list($x,$y) = $lnglat; $Baidu_Server = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x={$x}&y={$y}"; $result = @file_get_contents($Baidu_Server); $json = json_decode($result); if($json->error == 0){ $bx = base64_decode($json->x); $by = base64_decode($json->y); $GPS_x = 2 * $x - $bx; $GPS_y = 2 * $y - $by; return $GPS_x.','.$GPS_y;//经度,纬度 }else return $lnglat; } |
以下是我正在用的函数,不过好像在iphone上有点问题,如果你有更好的解决方案,可以留言发给我,不尽感激。
代码如下 | 复制代码 |
// 如果是手机设置,跳转到手机页面 if (isMobile ()) { Header ( "Location: mobile.php" ); exit (); } /** * 判断用户是否为移动用户,可以判断iphone,Android,Windows Mobile和一般的手机系统 */ function isMobile(){ // 判断 iphone 和 ipad,不跳转 $userAgent = $_SERVER['HTTP_USER_AGENT']; if(strpos($userAgent, "iPhone") || strpos($userAgent, "iPad") || strpos($userAgent, "iPod") || strpos($userAgent, "iOS")){ return false; } // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) { return true; } //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息 if (isset ($_SERVER['HTTP_VIA'])) { //找不到为flase,否则为true return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false; } //判断手机发送的客户端标志,兼容性有待提高 if (isset ($_SERVER['HTTP_USER_AGENT'])) { $clientkeywords = array ( 'nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp', 'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu', 'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile' ); // 从HTTP_USER_AGENT中查找手机浏览器的关键字 if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) { return true; } } //协议法,因为有可能不准确,放到最后判断 if (isset ($_SERVER['HTTP_ACCEPT'])) { // 如果只支持wml并且不支持html那一定是移动设备 // 如果支持wml和html但是wml在html之前则是移动设备 if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) { return true; } } return false; } |
首先需要说明的是php是服务器端的语言,是获取不到客户端的屏幕的宽度和高度的。但是有变通的方法就是通过客户端脚本语言javascript获取客户端的电脑屏幕的宽度和高度,然后通过ajax或者cookie的形式传递给php脚本语言,从而实现php获取客户端电脑屏幕宽度和高度的办法。
通过javascript获取客户端电脑的宽度,高度,分辨率的方法如下:
屏幕分辨率的高: window.screen.height
屏幕分辨率的宽: window.screen.width
屏幕可用工作区高度: window.screen.availHeight
屏幕可用工作区宽度: window.screen.availWidth
传递给php服务器端的方法如下:
代码如下 | 复制代码 |
$.post('http://www.phpernote.com/php-template-framework/189.html',{w:width,h:height});//这里忽略了返回值 |
综合以上通过php获取客户端电脑显示屏幕的宽度,高度,分辨率的完整代码如下:
代码如下 | 复制代码 |
<html xmlns="http://www.phpernote.com/javascript-function/34.html"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script type="text/javascript" src="http://www.phpernote.com/js/jquery.min.js"></script> <script type="text/javascript"> $(function(){ var width=window.screen.height; var height=window.screen.width; $.post('http://www.phpernote.com/php-template-framework/189.html',{w:width,h:height});//这里向你的统计文件里面传入相关的参数 }); </script> </head> <body> 这里是正文...... </body> </html> |
利用 SimpleXML 去检查 XML 结构是否符合规格,为了让这个程序可以多用途,采用了一个基准文件的作为结构准则,依据里面定义的节点跟属性,去检查文件是否符合基本要求的格式。
代码如下 | 复制代码 |
<?php /**检查 XML 文件结构 * @param string $baseFilePath 基准结构文件 * @param string $checkFilePath 待检查文件 * @return bool 当结构与基准文件相符合时则传递 true,否则是 false * */ function checkXmlFileStructure($baseFilePath,$checkFilePath){ /*开启 Base File*/ if(!file_exists($baseFilePath)){ return false; } $base = simplexml_load_file($baseFilePath); if($base===false){ return false; } /*开启 Check File*/ if(!file_exists($checkFilePath)){ return false; } $check = simplexml_load_file($checkFilePath); if($check===false){ return false; } /*比较起始点的名称*/ if($base->getName() != $check->getName()){ return false; } /*比较结构*/ return checkXmlStructure($base,$check); } /**检查 XML 结构 * @param SimpleXMLElement $base 基准结构对象 * @param SimpleXMLElement $check 待检查 XML 对象 * @return bool 当结构与基准对象相符合时则传递 true,否则是 false * */ function checkXmlStructure($base,$check){ /*检查属性*/ foreach ($base->attributes() as $name => $baseAttr){ /*必要的属性不存在*/ if(!isset($check->attributes()->$name)){ return false; } } /*当没有子节点时,则检查对象也不能有子节点*/ if(count($base->children())==0){ return (count($check->children())==0); } /*将检查对象的子节点分群*/ $checkChilds = array(); foreach($check->children() as $name => $child){ $checkChilds[$name][] = $child; } /*检查子节点*/ $checked = array(); foreach($base->children() as $name => $baseChild){ /*跳过已经检查的子节点*/ if(in_array($name, $checked)){ continue; } $checked[] = $name; /*检查必要的子节点是否存在*/ if(emptyempty($checkChilds[$name])){ return false; } foreach ($checkChilds[$name] as $child){ /*递回检查子节点*/ if( !checkXmlStructure($baseChild, $child) ){ return false; } } } return true; } /*==============================================================================*/ if(isset($_SERVER['argv'])){ parse_str(preg_replace('/&[-]+/','&',join('&',$_SERVER['argv'])), $_GET); if(emptyempty($_GET['base_file']) || emptyempty($_GET['check_file'])){ echo "Run: ".basename(__FILE__)." base_file=base.xml check_file=check.xmln"; exit(1); } exit( checkXmlFileStructure($_GET['base_file'],$_GET['check_file']) ? 0 : 1); }else{ if(emptyempty($_GET['base_file']) || emptyempty($_GET['check_file'])){ echo "Run: ".basename(__FILE__)."?base_file=base.xml&check_file=check.xml<br />"; exit; } echo( checkXmlFileStructure($_GET['base_file'],$_GET['check_file']) ? '1' : '0'); } |
使用方式(shell)
代码如下 | 复制代码 |
php check_xml_file_structure.php base_file=base.xml check_file=check.xml if [ "j$?" != "j0" ]; then echo "Run Error" fi |
测试范例 1
base_1.xml
代码如下 | 复制代码 |
<?xml version="1.0" encoding="UTF-8"?> <items> <item> <Category>Category文字</Category> <Title>Title文字</Title> </item> </items> |
check_1.xml
代码如下 | 复制代码 |
<?xml version="1.0" encoding="UTF-8"?> <items> <item> <Category>Category文字</Category> <Title>Title文字</Title> </item> <item> <Category>Category文字</Category> <Title>Title文字</Title> <Description>Description文字</Description> </item> </items> |
测试范例 2
base_2.xml
代码如下 | 复制代码 |
<?xml version="1.0" encoding="UTF-8"?> <items> <item category="Category文字" Title="Title文字"/> </items> |
check_2.xml
代码如下 | 复制代码 |
<?xml version="1.0" encoding="UTF-8"?> <items> <item category="Category文字" Title="Title文字" Description="Description文字" /> <item category="Category文字" Title="Title文字" /> <item category="Category文字" Title="Title文字" Description="Description文字" /> </items> |
相关文章
- php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
- 本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
- 这篇文章主要介绍了js如何实现浏览器打印功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
- 其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
js代码判断浏览器种类IE、FF、Opera、Safari、chrome及版本
第一种,只区分浏览器,不考虑版本 复制代码 代码如下:function myBrowser(){ var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isOpera = userAgent.indexOf("Opera") > -1; if (isOp...2014-05-31- 这篇文章主要介绍了详解Vue Cli浏览器兼容性实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-09
- 这篇文章主要介绍了微信小程序(应用号)开发新闻客户端实例的相关资料,需要的朋友可以参考下...2016-10-25
- 这篇文章主要介绍了如何使用 JavaScript 操作浏览器历史记录 API,帮助大家更好的理解和使用JavaScript,感兴趣的朋友可以了解下...2020-11-24
- 这篇文章主要介绍了Python获取浏览器窗口句柄过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-26
- 这篇文章主要给大家介绍了关于vue如何调用浏览器分享的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-20
- 在网站前端开发中,浏览器兼容性问题本已让我们手忙脚乱,Chrome的出世不知道又要给我们添多少乱子。浏览器兼容性是前端开发框架要解决的第一个问题,要解决兼容性问题就得首先准确判断出浏览器的类型及其版本。 JavaScrip...2014-05-31
- 这篇文章主要介绍了在页面中输出当前客户端时间javascript实例代码的相关资料,需要的朋友可以参考下...2016-03-03
- 网上有关蓝牙接收的资料很多,使用起来也很简单,但是我觉得还是有必要把这些知识总结下来,蓝牙开发需要用到一个第三方的库InTheHand.Net.Personal.dll,感兴趣的朋友可以了解下,或许对你有所帮助...2020-06-25
- 这篇文章主要介绍了JAVA读取文件流,设置浏览器下载或直接预览操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-09
- 由于国内好几个浏览器都是双核浏览器(蛋痛,做一个浏览器壳就说国产,而且使用率高),有时打开网页会出现不兼容模式,在极速模式下是好的,现在我们来用代码实现网页自动调用国内...2016-09-20
- 这篇文章主要介绍了C# 模拟浏览器并自动操作的实例代码,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-11-03
- 这篇文章主要介绍了Python爬虫之Selenium实现关闭浏览器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-04
- 这篇文章主要介绍了JS跨浏览器解析XML应用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-16
- 这篇文章主要介绍了vue项目中禁用浏览器缓存配置案例,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-09-12
- 在jquery.1.9以前的版本,可以使用$.browser很轻松的判断浏览器的类型和版本,但是在1.9中和以后的版本中,$.browser已经被删除,下面就介绍一下如何实现此功能,希望能够给需要的朋友带来帮助...2016-01-14