首页 > 编程技术 > php

php中$_SERVER['HTTP_USER_AGENT']判断是否为手机访问网站

发布时间:2016-9-20 13:08

HTTP_USER_AGENT是获取用户浏览器信息的一个全局变量,我们可以利用HTTP_USER_AGENT获取的值来判断用户是手机浏览器还是电脑访问网。
 代码如下 复制代码

$uAgent = $_SERVER['HTTP_USER_AGENT'];

$osPat = "mozilla|m3gate|winwap|openwave|Windows NT|Windows 3.1|95|Blackcomb|98|ME|X Window|ubuntu|Longhorn|AIX|Linux|AmigaOS|BEOS|HP-UX|OpenBSD|FreeBSD|NetBSD|OS/2|OSF1|SUN";

if(preg_match("/($osPat)/i", $uAgent )) //winwap 模拟WAP手机上网的一个浏览器; openwave|后面为各pc操作系统

{

echo "电脑访问";

}

else

{

echo "手机访问";

}

echo '<br/>'.$uAgent;

现在我们事完整的把实例写成一个文件

 代码如下 复制代码


$ua = strtolower($_SERVER['HTTP_USER_AGENT']);

$uachar = "/(nokia|sony|ericsson|mot|samsung|sgh|lg|philips|panasonic|alcatel|lenovo|cldc|midp|mobile|wap)/i";

if(($ua == '' || preg_match($uachar, $ua))&& !strpos(strtolower($_SERVER['REQUEST_URI']),'wap'))
{
    $Loaction = 'wap/';

    if (!empty($Loaction))
    {
        ecs_header("Location: $Loactionn");

        exit;
    }

}


/** 
* 自定义 header 函数,用于过滤可能出现的安全隐患 

* @param   string  string  内容 

* @return  void 
**/ 
function ecs_header($string, $replace = true, $http_response_code = 0)  
{  
    if (strpos($string, '../upgrade/index.php') === 0)  
    {  
        echo '<script type="text/javascript">window.location.href="' . $string . '";</script>';  
    }  
    $string = str_replace(array("r", "n"), array('', ''), $string);  
 
    if (preg_match('/^s*location:/is', $string))  
    {  
        @header($string . "n", $replace);  
 
        exit();  
    }  
 
    if (emptyempty($http_response_code) || PHP_VERSION < '4.3')  
    {  
        @header($string, $replace);  
    }  
    else 
    {  
        @header($string, $replace, $http_response_code);  
    }  

javascript中采用navigator.userAgent 来获取,但非智能机似乎不支持js。

支持js的移动客户端还可以用以下代码简单判断是不是windows电脑访问的

 代码如下 复制代码

if(navigator.platform.indexOf('Win32')!=-1){
//go to pc
}else{
// go to 手机
}

更多关于判断手机访问文章 http://www.111cn.net/phper/php-cy/44574.htm

在php中rmdir是不能直接删除非空目录的,如果想利用rmdir来删除非空目录我们需要遍历目录然后来删除目录中的文件再删除目录的文件夹即可实现,

rmdir() 函数删除空的目录。

 代码如下 复制代码

<?php
$path = "images";
if(!rmdir($path))
  {
  echo ("Could not remove $path");
  }
else
{
 echo '删除目录失败,因为images非空目录';
}
?>

如果images是空目录可成功删除,如果非空目录就删除不了


代码如下

 代码如下 复制代码

<?php
// 说明: 删除非空目录的解决方案

function removeDir($dirName)
{
    if(! is_dir($dirName))
    {
        return false;
    }
    $handle = @opendir($dirName);
    while(($file = @readdir($handle)) !== false)
    {
        if($file != '.' && $file != '..')
        {
            $dir = $dirName . '/' . $file;
            is_dir($dir) ? removeDir($dir) : @unlink($dir);
        }
    }
    closedir($handle);
     
    return rmdir($dirName) ;
}
?>

在php中可以直接调用linux中的文件压缩命令来实现文件快速压缩与解压缩,有需要的朋友可参考参考。

用PHP调用Linux的命令行 ,执行压缩命令,OK,马上行动!


/*拆分成3个txt文件 分别是wow_1.txt wow_2.txt 和 wow_3.txt  全部放到 Exl_file 目录下*/

 代码如下 复制代码

$outputs=array();

/*用php的exec执行Linux命令   括号里的字符串就是你在Linux命令窗口里敲的命令;
   第二个参数是  linux执行该命令后返回的结果数组;
   linux执行返回的每一条结果依次存入该数组
  
   第三个参数是结果,如果执行成功,则Linux返回结果值为0,如果执行失败,则结果值不为0
  
*/
  

 代码如下 复制代码

exec("zip ./Exl_file/wow.zip ./Exl_file/wow_1.txt ./Exl_file/wow_2.txt ./Exl_file/wow_3.txt",$outputs,$rc);


if($rc!=0){
    foreach ($outputs as $ko=>$vo){
        echo "$vo<br/>";
    }
}else{
    $zipfile='./Exl_file/wow.zip';
       
    //文件下载  输出后删除相关文件
    }
}

你可以把  if($rc!=0)  改成  if(1==1)  查看Linux执行命令返回的结果行,如下图:

 代码如下 复制代码
adding: Exl_file/wow_1.txt (deflated 96%)
adding: Exl_file/wow_2.txt (deflated 97%)
adding: Exl_file/wow_3.txt (deflated 97%) 

   可以看到执行返回的信息全部输入到了 $outputs 数组中,*.zip文件生成成功

php提供了system(),exec(),passthru()这几个函数来调用外部的命令.

他们的区别 :

system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以获得命令执行的状态码

一个php调用zip实现方法,这个在windows中的

 #upload.php
   

 代码如下 复制代码

    <table border='0' >
   
    <form ENCTYPE="multipart/form-data" action="upsave.php" method="post">
   
    <tr>
   
    <td>如果是*.ZIP的文件会被自动解压缩<br>
   
    <INPUT NAME="MyFile" TYPE="File" size="50">
   
    </td>
   
    </tr>
   
    <tr>
   
    <td colspan='2' align="center">
   
    <input type="Submit" value=" 上传 " class=iwhite>
   
    <input type="reset" value=" 重填 " class=iwhite>
   
    </td>
   
    </tr>
   
    </table>
   
    </body>
   
    </html>
   
    <?
   
    //upsave.php
   
    //保存上传的文件
   
    $filename="$MyFile_name";
   
    copy($MyFile,"$filename");
   
    unlink($MyFile);
   
    //判断是否是ZIP文件
   
    $expand_name=explode(".",$filename);
   
    if($expand_name[1] == "zip" or $expand_name[1] == "ZIP")
   
    {
   
    $str="pkunzip.exe -e $filename ";
   
    exec($str);
   
    unlink($filename);
   
    }
   
    ?>
bool get_magic_quotes_gpc ( void )返回当前 magic_quotes_gpc 配置选项的设置 记住,尝试在运行时设置 magic_quotes_gpc 将不会生效。

默认情况下,PHP 指令 magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

例子

1. addslashes() 示例

 代码如下 复制代码

<?
$str = "Is your name O&#39;reilly?";

// 输出:Is your name O''&#39;reilly?
echo addslashes($str);
?>

返回值

关闭 magic_quotes_gpc 时返回 0,否则是 1。 在 PHP 5.4.O 起将使用返回 FALSE

 代码如下 复制代码

<?php
// 如果启用了魔术引号
echo $_POST['lastname'];             // O'reilly
echo addslashes($_POST['lastname']); // O\'reilly

// 适用各个 PHP 版本的用法
if (get_magic_quotes_gpc()) {
    $lastname = stripslashes($_POST['lastname']);
}
else {
    $lastname = $_POST['lastname'];
}

// 如果使用 MySQL
$lastname = mysql_real_escape_string($lastname);

echo $lastname; // O'reilly
$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
?>


php.ini:get_magic_quotes_gpc

在php的配置文件中,有个布尔值的设置,就是magic_quotes_runtime,当它打开时,

php的大部分函数自动的给从外部引入的(包括数据库或者文件)数据中的溢出字符加上反

斜线。 当然如果重复给溢出字符加反斜线,那么字符串中就会有多个反斜线,所以这时

就要用set_magic_quotes_runtime()与get_magic_quotes_runtime()设置和检测php.ini

文件中magic_quotes_runtime状态。 为了使自己的程序不管服务器是什么设置都能正常

执行。可以在程序开始用get_magic_quotes_runtime检测该设置的状态决定是否要手工处理

,或者在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉该设置。

magic_quotes_gpc设置是否自动为GPC(get,post,cookie)传来的数据中的'"\加上反斜

线。可以用get_magic_quotes_gpc()检测系统设置。如果没有打开这项设置,可以使用

addslashes()函数添加,它的功能就是给数据库查询语句等的需要在某些字符前加上了反

斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。

一个PHP二维数组按照一个字段排序程序实现代码,有需要的朋友可参考参考。

二维数组

 代码如下 复制代码
$arr = array ( 
    array ( 'key' => '69931', 
         'hsex' => '女', 
         'username' => 'jiayang3401', 
         'clicks' => 10, 
         'hyinglou' => '无' ),      
    array ( 'key' => '81', 
         'hsex' => '女', 
        'username' => 'susan', 
         'clicks' => 15, 
     'hyinglou' => '摄影名店' ),      
);   

 


 代码如下 复制代码

foreach($arr as $vo){ 
    $t[] = $vo['clicks']; 

array_multisort($t, $arr);//排序 
var_dump($arr); 

标签:[!--infotagslink--]

您可能感兴趣的文章: