当前位置:  编程技术>php
本页文章导读:
    ▪判断访问者所用设备是iPhone、iPad或PC电脑的方法      iPad 使用的是 Safari Mobile 浏览器,User Agent 是: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10  判断是否 iPad 浏览器,关键是看它.........
    ▪php register_globals参数OFF与ON的区别      在php.ini中有个配置项是register_globals,这个配置影响到php如何接收传递过来的参数。 当遇到表单无法传递数据?程序无法得到传递过来的变量?诸如此类的问题时,你有必要仔细阅读本文的介.........
    ▪php模拟浏览器(BrowserEmulator)获取远程文件内容的实例代码      出于安全考虑,常常会关闭fopen, file_get_contents, 也就是会把 allow_url_fopen设置为OFF。 此时大家可以借助下面的类,继续使用这些函数。供大家学习参考。 代码如下:   代码示例: <?php    .........

[1]判断访问者所用设备是iPhone、iPad或PC电脑的方法
    来源: 互联网  发布时间: 2013-12-24

iPad 使用的是 Safari Mobile 浏览器,User Agent 是:
Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10 

判断是否 iPad 浏览器,关键是看它的 User Agent 中是否有 iPad。

1、js实现代码
 

代码示例:
<script language="javascript">
   function is_iPad(){ 
        var ua = navigator.userAgent.toLowerCase(); 
        if(ua.match(/iPad/i)=="ipad") { 
            return true; 
        } else { 
            return false; 
        } 
    } 
</script>

2、php实现
 

代码示例:

<?php
//方法1
$is_iPad = (bool) strpos($_SERVER['HTTP_USER_AGENT'],'iPad'); 

//方法2     
    $agent = strtolower()($_SERVER['HTTP_USER_AGENT']); 
    $is_pc = (strpos($agent, 'windows nt')) ? true : false; 
    $is_iphone = (strpos($agent, 'iphone')) ? true : false; 
    $is_ipad = (strpos($agent, 'ipad')) ? true : false; 
     
    if($is_pc){ 
     echo "PC机";  //by http://www.
    } 
    if($is_iphone){ 
     echo "iPhone"; 
    } 
    if($is_ipad){ 
     echo "iPad"; 
    }       
?> 

3、htaccess
 

代码示例:
RewriteCond %{HTTP_USER_AGENT} ^.*iPad.*$ 
RewriteRule ^(.*)$ http://ipad. [R=301] 
 

如果是 iPad 浏览器,跳转到 iPad 页面。


    
[2]php register_globals参数OFF与ON的区别
    来源: 互联网  发布时间: 2013-12-24

在php.ini中有个配置项是register_globals,这个配置影响到php如何接收传递过来的参数。

当遇到表单无法传递数据?程序无法得到传递过来的变量?诸如此类的问题时,你有必要仔细阅读本文的介绍了。

register_globals的值可以设置为:On或者Off。
通过以下的例子,来看看它们之间的区别。
 

代码示例:
<form name=”frmTest” id=”frmTest” action=”URL”> 
 <input type=”text” name=”user_name” id=”user_name”> 
 <input type=”password” name=”user_pass” id=”user_pass”> 
 <input type=”submit” value=”login”> 
</form> 

当register_globals=Off时,下一个程序接收时应该用$_GET['user_name']和$_GET['user_pass']来接受传递过来的值。
(注:当<form>的method属性为post的时候应该用$_POST['user_name']和$_POST['user_pass'])

当register_globals=On时,下一个程序可以直接使用$user_name和$user_pass来接受值。

也就是说,register_globals注册为全局变量,所以当On时,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它。
所以,碰到上边那些无法得到值的问题的朋友,应该首先检查一下register_globals的设置和你获取值的方法是否匹配。
注:查看可以用phpinfo()函数或直接查看php.ini。

使用Off的原因如下:
1、php以后的新版本默认都用Off,虽然你可以设置它为On,但是当你无法控制服务器的时候,你的代码的兼容性就成为一个大问题,所以,你最好从现在就开始用Off的风格开始编程
2、参考文章:
http://www./shouce/php5/security.globals.html

问题:以前用On风格写的大量脚本怎么办?
这样看你的前期脚本规划如何了。如果有个公共包含文件,比如config.inc.php一类的文件,在这个文件里加上以下的代码来模拟一下。
 

代码示例:
<?php 
     if ( !ini_get(‘register_globals’) ) 
     { 
         extract($_POST); 
         extract($_GET); 
         extract($_SERVER); 
         extract($_FILES); 
         extract($_ENV); 
         extract($_COOKIE); 
         
         if ( isset()($_SESSION) ) 
         { 
             extract($_SESSION); 
         } 
     } 
?> 

register_globals = Off的情况不仅仅影响到如何获取从<form>、url传递过来的数据,也影响到session、cookie,对应的,得到session、cookie的方式应该为:$_SESSION[]、$_COOKIE。同时对于session的处理也有一些改变,比如,session_register()没有必要而且失效,具体的变化,请查看php 手册中的Session handling functions。

$_REQUEST中间的内容实际上还是来源于$_GET $_POST $_COOKIE,缺点是无法判断变量到底来自于get post 还是cookie,对要求比较严格的场合不适用。

就这么一点关于register_globals的知识,都是如此博大精深,优秀的php果然不同凡响啊。


    
[3]php模拟浏览器(BrowserEmulator)获取远程文件内容的实例代码
    来源: 互联网  发布时间: 2013-12-24

出于安全考虑,常常会关闭fopen, file_get_contents, 也就是会把 allow_url_fopen设置为OFF。
此时大家可以借助下面的类,继续使用这些函数。供大家学习参考。

代码如下:
 

代码示例:
<?php     
    /**
    * BrowserEmulator class. Provides methods for opening urls and emulating
    * a web browser request.
    **/ 
    class BrowserEmulator { 
      var $headerLines = Array(); 
      var $postData = Array(); 
      var $multiPartPost = False; 
      var $authUser = ""; 
      var $authPass = ""; 
      var $port; 
      var $lastResponse = ''; 
      var $lastRequest = ''; 
      var $debug = false; 
      var $customHttp = False; 
      
      public function BrowserEmulator() { 
        $this->resetHeaderLines(); 
        $this->resetPort(); 
      } 
        /**
      * Adds a single header field to the HTTP request header. The resulting header
      * line will have the format
      * $name: $value\n
      **/ 
      public function addHeaderLine($name, $value) { 
        $this->headerLines[$name] = $value; 
      } 
      
      /**
      * Deletes all custom header lines. This will not remove the User-Agent header field,
      * which is necessary for correct operation.
      **/ 
      public function resetHeaderLines() { 
        $this->headerLines = Array(); 
        
        /*******************************************************************************/ 
        /**************   YOU MAX SET THE USER AGENT STRING HERE   *******************/ 
        /* http://www.      */ 
        /* default is "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",         */ 
        /* which means Internet Explorer 6.0 on WinXP                       */ 
        
        $this->headerLines["User-Agent"] = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10'; 
     
     
        /*******************************************************************************/ 
        /**
        * Set default to accept gzip encoded files
        */ 
        $this->headerLines["Accept-Encoding"] = "*/*"; 
      } 
      
      /** 
      * Add a post parameter. Post parameters are sent in the body of an HTTP POST request. 
      **/ 
      public function addPostData($name, $value = '') { 
        $this->postData[$name] = $value; 
      } 
      
      /**
      * Deletes all custom post parameters.
      **/ 
      public function resetPostData() { 
        $this->postData = Array(); 
      }     
     
      public function handleMultiPart() { 
      $boundry = '----------------------------795088511166260704540879626';
     
        $this->headerLines["Accept"] = ' text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; 
        $this->headerLines["Connection"] = 'Close'; 
        $this->headerLines["Content-Type"] = "multipart/form-data; boundary=$boundry"; 
        $out = ''; 
        foreach($this->postData as $item => $data) { 
          if(is_array($data)) { 
            $out .= "--$boundry\r\n" 
                   ."Content-Disposition: form-data; name=\"$item\"; filename=\"{$data['filename']}\"\r\n" 
                   ."Content-Type: application/octet-stream\r\n" 
                   ."\r\n" 
                   .$data['contents']."\r\n"; 
          } else { 
            $out .= "--$boundry\r\n" 
                   ."Content-Disposition: form-data; name=\"$item\"\r\n" 
                   ."\r\n" 
                   .$data."\r\n"; 
          } 
        } 
        $out .= "--{$boundry}--\r\n"; 
        return $out; 
      }     
     
      /** 
      * Sets an auth user and password to use for the request. 
      * Set both as emptyempty strings to disable authentication. 
      **/ 
      public function setAuth($user, $pass) { 
        $this->authUser = $user; 
        $this->authPass = $pass; 
      } 
      /**
      * Selects a custom port to use for the request.
      **/ 
      public function setPort($portNumber) { 
        $this->port = $portNumber; 
      } 
      
      /**
      * Resets the port used for request to the HTTP default (80).
      **/ 
      public function resetPort() { 
        $this->port = 80; 
      }     
     
      /**
       * Parse any cookies set in the URL, and return the trimed string
       **/ 
      public function preparseURL(/blog_article/$url/index.html) { 
        if($cookies = stristr($url, ':COOKIE:')) { 
          $url = rtrim(substr($url, 0, -strlen($cookies)), '&'); 
          $this->addHeaderLine("Cookie", '$Version=1; '.strtr(substr($cookies, 8), '&', ';')); 
        } 
        return $url; 
      }     
     
      /**
      * Make an fopen call to $url with the parameters set by previous member
      * method calls. Send all set headers, post data and user authentication data.
      * Returns a file handle on success, or false on failure.
      **/ 
      public function fopen($url) { 
        $url = $this->preparseURL(/blog_article/$url/index.html); 
        $this->lastResponse = Array(); 
        
        $parts = parse_url($url); 
        $protocol = $parts['scheme']; 
        $server = $parts['host']; 
        $port = $parts['port']; 
        $path = $parts['path']; 
        if(isset()($parts['query'])) { 
          $path .= '?'.$parts['query']; 
        }    
     
        if($protocol == 'https') { 
          // TODO: https is locked to port 443, why? 
          $server = 'ssl://'.$server; 
          $this->setPort(443); 
        } elseif ($port!="") { 
            $this->setPort($port); 
        } 
        if ($path=="") $path = "/"; 
        $socket = false; 
        $socket = fsockopen($server, $this->port); 
        if ($socket) { 
            if ($this->authUser!="" && $this->authPass!="") { 
              $this->headerLines["Authorization"] = "Basic ".base64_encode($this->authUser.":".$this->authPass); 
            } 
           
            if($this->customHttp) 
              $request = $this->customHttp." $path\r\n"; 
            elseif (count($this->postData)==0) 
              $request = "GET $path HTTP/1.0\r\n"; 
            else 
              $request = "POST $path HTTP/1.1\r\n"; 
     
     
            $request .= "Host: {$parts['host']}\r\n"; 
            
            if ($this->debug) echo $request; 
            if (count($this->postData)>0) { 
              if($this->multiPartPost) { 
                $PostString = $this->handleMultiPart(); 
              } else { 
                $PostStringArray = Array(); 
                foreach ($this->postData AS $key=>$value) { 
                  if(emptyempty($value)) 
                    $PostStringArray[] = $key; 
                  else 
                    $PostStringArray[] = "$key=$value"; 
                } 
                $PostString = join("&", $PostStringArray); 
              } 
              $this->headerLines["Content-Length"] = strlen($PostString); 
            } 
            
            foreach ($this->headerLines AS $key=>$value) { 
              if ($this->debug) echo "$key: $value\n"; 
              $request .= "$key: $value\r\n"; 
            } 
            if ($this->debug) echo "\n"; 
            $request .= "\r\n"; 
            if (count($this->postData)>0) { 
              $request .= $PostString; 
            } 
        } 
        $this->lastRequest = $request;     
     
        for ($written = 0; $written < strlen($request); $written += $fwrite) { 
          $fwrite = fwrite($socket, substr($request, $written)); 
          if (!$fwrite) { 
            break; 
          } 
        } 
        if ($this->debug) echo "\n"; 
        if ($socket) { 
          $line = fgets($socket); 
          if ($this->debug) echo $line; 
          $this->lastResponse .= $line; 
          $status = substr($line,9,3); 
          while (trim($line = fgets($socket)) != ""){ 
            if ($this->debug) echo "$line"; 
            $this->lastResponse .= $line; 
            if ($status=="401" AND strpos($line,"WWW-Authenticate: Basic realm=\"")===0) { 
              fclose($socket); 
              return FALSE; 
            } 
          } 
        } 
        return $socket; 
      } 
       
      /**
      * Make an file call to $url with the parameters set by previous member
      * method calls. Send all set headers, post data and user authentication data.
      * Returns the requested file as a string on success, or false on failure.
      **/ 
      public function file_get_contents($url) { 
        if(file_exists($url)) // local file 
          return file_get_contents($url); 
        $file = ''; 
        $socket = $this->fopen($url); 
        if ($socket) { 
            while (!feof($socket)) { 
              $file .= fgets($socket); 
            } 
        } else { 
            Yii::log('Browser Emulator: file_get_contents bad socket', CLogger::LEVEL_ERROR); 
            return FALSE; 
        } 
        fclose($socket); 
     
     
        if(strstr($this->lastResponse, 'Content-Encoding: gzip') !== FALSE) { 
          if(function_exists('gzinflate')) { 
            $file = gzinflate(substr($file,10)); 
            if($this->debug) echo "Result file: ".$file; 
          } 
        }
        return $file; 
      }
     
      /**
       * Simulate a file() call by exploding file_get_contents()
       **/ 
      public function file($url) { 
        $data = $this->file_get_contents($url); 
        if($data) 
          return explode()('\n', $data); 
        return False; 
      } 
      
      public function getLastResponseHeaders() { 
        return $this->lastResponse; 
      } 
    }
?>

 

代码示例:

实例:
<?php
    $be = new BrowserEmulator(); 
     
    $output = $be->file_get_contents("http:///rss.php"); 
    $response = $be->getLastResponseHeaders(); 
     
    echo $output; 
?>

关联:
PHP获取远程文件内容
 

代码示例:
<?php
 function curl_get_contents($url) 
    { 
        $dir = pathinfo($url); 
        $host = $dir['dirname']; 
        $refer = $host.'/'; 
     
        $ch = curl_init($url); 
        curl_setopt ($ch, CURLOPT_REFERER, $refer); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
        $data = curl_exec($ch); 
        curl_close($ch); 
         
        return $data; 
    }
?>

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3