php是如何判定手机、电脑访问自动跳转头文件的

 更新时间:2016年11月25日 15:33  点击:1448
我们经常会遇到用手机和电脑打开网站的时候,发现打开的页面是不同的,那么这种方法是怎么做到的呢?我们用php代码教给大家。

php判定手机电脑访问自动跳转头文件代码如下:

<?php 
function is_mobile_request()  
{  
 $_SERVER['ALL_HTTP'] = isset($_SERVER['ALL_HTTP']) ? $_SERVER['ALL_HTTP'] : '';  
 $mobile_browser = '0';  
 if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|iphone|ipad|ipod|android|xoom)/i', strtolower($_SERVER['HTTP_USER_AGENT'])))  
  $mobile_browser++;  
 if((isset($_SERVER['HTTP_ACCEPT'])) and (strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') !== false))  
  $mobile_browser++;  
 if(isset($_SERVER['HTTP_X_WAP_PROFILE']))  
  $mobile_browser++;  
 if(isset($_SERVER['HTTP_PROFILE']))  
  $mobile_browser++;  
 $mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4));  
 $mobile_agents = array(  
    'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',  
    'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',  
    'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',  
    'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',  
    'newt','noki','oper','palm','pana','pant','phil','play','port','prox',  
    'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',  
    'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',  
    'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',  
    'wapr','webc','winw','winw','xda','xda-'
    );  
 if(in_array($mobile_ua, $mobile_agents))  
  $mobile_browser++;  
 if(strpos(strtolower($_SERVER['ALL_HTTP']), 'operamini') !== false)  
  $mobile_browser++;  
 // Pre-final check to reset everything if the user is on Windows  
 if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows') !== false)  
  $mobile_browser=0;  
 // But WP7 is also Windows, with a slightly different characteristic  
 if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows phone') !== false)  
  $mobile_browser++;  
 if($mobile_browser>0)  
  return true;  
 else
  return false;
}
    
if(is_mobile_request()){ 
header("location:app/index.html");
exit();
}
else{ 
header("location:index/index.html");
exit(); 
}
?>

以上就是php判定手机电脑访问自动跳转头文件的代码,有需要的小伙伴们,可以根据实际需要修改即可。

微信公众号开发者模式普通消息模式我们用到的比较多就是说什么然后自动回复了,下面我们就一起来看一篇关于微信公众号开发者模式普通消息模式例子了,具体的操作如下所示。

前面已经说了,怎么来开启和配置微信服务号的开者模式了,这次要讲的就是针对和用户互动的一些事件。

本次主要讲的是,用户通过微信服务号输入框,发送给服务号的消息,怎么自动回复给用户。非开者模式,只需要在微信自动回复配置上关键词即可以。开发者模式需要通过responseMsg或者自己定义的。

关于responseMsg方法,是在第一步进行开启状态的时候那个相关类里的方法。

首先看下这个方法的:

public function responseMsg() {
$postStr = $GLOBALS ["HTTP_RAW_POST_DATA"];
if (! empty ( $postStr )) {
$postObj = simplexml_load_string ( $postStr, 'SimpleXMLElement', LIBXML_NOCDATA );
$MsgType = $postObj->MsgType;
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim ( $postObj->Content );
$time = time ();
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$msgType = "text";
$contentStr = '亲,测试成功,已经到您的信息!';
$resultStr = sprintf ( $textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr );
echo $resultStr;exit();
} else {
exit ();
}
}
上面的方法,基本是一个比较简单的方法了。下面说明下上面几个重要的变量值代表含义:

$postObj 用户发送过来的数据,以xml的形式
下面是解析xml的结果:

$MsgType 消息类型
$fromUsername 发消息者的openid
$toUsername 开发者微信号
$keyword 发送的内容(注意:本次例子用的是text文本形式)
$time 是自己写的,做业务需求的时候有时候需要。
$textTpl 是回复给用户的模板样式。模式样式也分为好几种
本次为普通消息类型有:text、image、voice、video等,其它模式详细查看文档,还有一种事件类型,下篇文章会详细说明。

本次例子用的是text文本回复模式,其它模式详细查看官方文档

说明下xml的参数:

ToUserName 请使用上面的fromUsername  发送给该用户
FromUserName 请使用ToUserName  消息发送者(开发者微信号)
CreateTime 时间(时间戳)
MsgType 消息类型(回复,注:本次例子text)
Content 回复的内容 可写A标签。尽量控制字数,不要太多。
该方法设置完之后,通过该微信服务号的文本框录入数据,点击发送,就会看到由服务号回复的。

亲,测试成功,已经到您的信息!

到这,已经把最简单的text完成。其它的普通回复操作也基本同样的流程,找对应的接受与回复的类型xml,然后进行操作。

提示:开发者,可以在msgType进行判断,看用户发送的消息,属于那种类型的,再进行不同的操作。

例如:

if($MsgType=='text'){}

if($MsgType=='image'){}

if($MsgType=='voice'){voice接受的参数,请参考上面的普通消息类文档,回复操作:请选择自己要回复内容的xml格式,请参考回复用户模板样式连接。}

静态变量在使用过程中最注要的就是要清除了,如果我们不清除可能会碰到一些问题了,今天我们来看一篇关于PHP的静态变量的注意细节与例子,具体的如下所示。

只要在变量前加上关键字static,该变量就成为静态变量了。

<?php
  function test()
  {
    static $nm = ;
    $nm = $nm * ;
    print $nm."<br />";
  }
  // 第一次执行,$nm = 
  test();
  // 第一次执行,$nm = 
  test();
  // 第一次执行,$nm = 
  test();
?>

程序运行结果:
1
2
2
4
3
8


函数test()执行后,变量$nm的值都保存了下来了。

在class中经常使用到静态属性,比如静态成员、静态方法。

之前的公司的小兄弟要去面试PHP,他遇到了一道PHP基础面试题,大致内容是如下:

function test(){
   static $a = 0;
   $a++;
   echo "before unset ".$a."<br/>";
   unset($a);
   $a = 23;
   echo "after unset ".$a."<br/>";
}
test();
test();
test();

看到这题的时候,就注意到了stats这个标记了$a。就知道这题不会是第一反应的结果。(结果如下)

PHP运行结果

PHP运行结果

这个$a 值没有因为unset() 函数改变,而是一直在累计!!我知道unset()对应static状态的变量是无效的。我马上查看了手册
unset() 销毁指定的变量。
unset() 在函数中的行为会依赖于想要销毁的变量的类型而有所不同。
如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。
如果在函数中 unset() 一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。

其实这样这么理解:

PHP变量关系图

PHP变量关系图

PHP的内存地址跟变量直接就是通过这种方式进行关联的。一般的变量是是通过关联的方式指向对应的地址,而不是真是的值。所以unset()的过程,其实是断了之间的联系,而不是抹掉了内存地址的值。
而static在初始化变量的,仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。

301重定向就是告诉搜索引擎永远都改变了地址了,这个就是跳转了会返回一个301状态码给搜索引擎了,所有搜索引擎都遵守这个规则了。

一、网站初期,一般只需做不带www的域名301转向到带www域名上;

代码如下:
Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^111cn.net [nc]
rewriterule ^(.*)$ http://www.111cn.net /$1 [r=301,nc]

二、不同域名301跳转方法;

当想重新更换域名时,我们就需要把原有的网站权重移动到最新的网站上,就需要做不同域名的301跳转;
代码如下:
Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^www.domain1.com [nc]
rewriterule ^(.*)$ http://www.domain2.com/$1 [r=301,nc]
注:此类跳转,一般是因网站改版而起,如果想要把权重最大化转移,请根据百度站长平台给出的解决办法进行解决。

以上2种方法,是针对Apache而言,如果你用得非Apache(如:nginx),那么就不能用.htaccses文件,也就不能使用以上方法,那怎么办?——对网页直接进行301跳转修改!

一、对某个单页面进行301跳转,只需在PHP网页顶部输入下面的代码就可以。代码如下:


<?php
Header("HTTP/1.1 301 Moved Permanently");
Header("Location: http://www.111cn.net ");
?>

二、针对全站页面进行301跳转解决方法

1、建立301.php文件

(文件名自取)

?php
$the_host = $_SERVER['HTTP_HOST'];//取得当前域名
$the_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';//判断地址后面部分
$the_url = strtolower($the_url);//将英文字母转成小写
if($the_url=="/index.php")//判断是不是首页
{
$the_url="";//如果是首页,赋值为空
}
if($the_host !== 'www.111cn.net ')//如果域名不是带www的网址那么进行下面的301跳转
{
header('HTTP/1.1 301 Moved Permanently');//发出301头部
header('Location:http://www.111cn.net '.$the_url);//跳转到带www的网址
}
?>

2、在网页文件中调用301.php

<?php include("301.php");?>
将这个代码放到你所有网页的最前面。

好了,重定向就做好了,将301文件上传到网站目录,就可以去看着你的成果了。
[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • 安卓手机app添加支付宝支付开发教程

    支付宝支付在国内算是大家了,我们到处都可以使用支付宝了,下文整理介绍的是在安卓app应用中使用支付宝进行支付的开发例子。 之前讲了一篇博客关与支付宝集成获取...2016-09-20
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • PHP+Ajax手机发红包的程序例子

    PHP+Ajax有许多的功能都会用到它小编今天就有使用PHP+Ajax实现的一个微信登录功能了,下面我们来看一个PHP+Ajax手机发红包的程序例子,具体如下所示。 PHP发红包基本...2016-11-25
  • 华为手机怎么恢复已卸载的应用?华为手机恢复应用教程

    华为手机怎么恢复已卸载的应用?有时候我们在使用华为手机的时候,想知道卸载的应用怎么恢复,这篇文章主要介绍了华为手机恢复应用教程,需要的朋友可以参考下...2020-06-29
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • 破解安卓手机上的九宫格锁方法步骤

    很多用安卓智能手机的朋友是用九宫格锁屏,网上也有暴力删除手机图形锁的方法,不过我们可以用程序来破解。本文只提供技术学习,不能干坏事 安卓手机的图形锁(九宫格)...2016-09-20
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • 华为手机怎么开启双时钟? 华为添加双时钟的技巧

    华为手机怎么开启双时钟?华为手机是可以设置双时钟的,如果来回在两个有时差的地方工作,是可以设置双时钟显示,下面我们就来看看华为添加双时钟的技巧,需要的朋友可以参考下...2020-12-08
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21