判断用户是PC还是移动端的php代码

 更新时间:2016年11月25日 15:35  点击:1861
本文我们来分享用php如何识别用户是通过 PC、iPad 还是手机,然后我们还可以看看腾讯的通过JS语句判断WEB网站的访问端是电脑还是手机。


先我们来看看一段用php如何识别用户是通过 PC、iPad 还是手机来访问网站?

<?php
$uAgent = $_SERVER['HTTP_USER_AGENT'];
$osPat = "mozilla|m3gate|winwap|openwave|Windows NT|Windows 3.1|95|Blackcomb|98|ME|XWindow|ubuntu|Longhorn|AIX|Linux|AmigaOS|BEOS|HP-UX|OpenBSD|FreeBSD|NetBSD|OS\/2|OSF1|SUN";
if(preg_match("/($osPat)/i", $uAgent ))
{
    echo "来着PC访问";
}
else
{
    echo "其他终端访问";
}
 
?>

以下是腾讯的通过JS语句判断WEB网站的访问端是电脑还是手机

腾讯网的适配代码
如何判断访问网站的机器类型-如何判断ipad
JS 判断浏览器客户端类型(ipad,iphone,android)

    <script type="text/javascript">
    <!--
            //平台、设备和操作系统
            var system = {
                win: false,
                mac: false,
                xll: false,
                ipad:false
            };
            //检测平台
            var p = navigator.platform;
            system.win = p.indexOf("Win") == 0;
            system.mac = p.indexOf("Mac") == 0;
            system.x11 = (p == "X11") || (p.indexOf("Linux") == 0);
            system.ipad = (navigator.userAgent.match(/iPad/i) != null)?true:false;
            //跳转语句,如果是手机访问就自动跳转到wap.baidu.com页面
            if (system.win || system.mac || system.xll||system.ipad) {
     
            } else {
     
                window.location.href = "http://www.jdpatro.com/3g/";
            }
    -->
    </script>

腾讯网的适配代码

    <script type="text/javascript">  
    if(/AppleWebKit.*Mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent))){
        if(window.location.href.indexOf("?mobile")<0){
            try{
                if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)){
                    window.location.href="http://shipei.qq.com/index.htm";
                }else if(/iPad/i.test(navigator.userAgent)){
                }else{
                    window.location.href="http://shipei.qq.com/simple/s/index/"
                }
            }catch(e){}
        }
    }
    </script>

    <script type="text/javascript">
        var browser = {
            versions : function() {
                var u = navigator.userAgent, app = navigator.appVersion;
                return {//移动终端浏览器版本信息                                  
                trident : u.indexOf('Trident') > -1, //IE内核                                  
                presto : u.indexOf('Presto') > -1, //opera内核                                  
                webKit : u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核                                  
                gecko : u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核                                 
                mobile : !!u.match(/AppleWebKit.*Mobile.*/)
                        || !!u.match(/AppleWebKit/), //是否为移动终端                                  
                ios : !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端                  
                android : u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器                                  
                iPhone : u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器                     
                iPad: u.indexOf('iPad') > -1, //是否iPad        
                webApp : u.indexOf('Safari') == -1,//是否web应该程序,没有头部与底部
                google:u.indexOf('Chrome')>-1
            };
        }(),
        language : (navigator.browserLanguage || navigator.language).toLowerCase()
        }
        document.writeln("语言版本: "+browser.language);
        document.writeln(" 是否为移动终端: "+browser.versions.mobile);
    </script>

如何判断访问网站的机器类型-如何判断ipad

如何判断是否是 iPad 浏览器呢,关键是看它的 User Agent 中是否有 iPad。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

function is_iPad(){        
 [object Object] [object Object] [object Object]var ua = navigator.userAgent.toLowerCase();
 [object Object] [object Object] [object Object]if(ua.match(/iPad/i)=="ipad") {                
 [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]return true;
 [object Object] [object Object] [object Object]} else {
 [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]return false;
 [object Object] [object Object] [object Object]}
}


$is_iPad = (bool) strpos($_SERVER['HTTP_USER_AGENT'],'iPad');

RewriteCond %{HTTP_USER_AGENT} ^.*iPad.*$
RewriteRule ^(.*)$ http://ipad.fairyfish.net [R=301]

JS 判断浏览器客户端类型(ipad,iphone,android)

    <script type="text/javascript">  
       var bForcepc
    = fGetQuery("dv") == "pc";   
       function
    fBrowserRedirect(){   
           var sUserAgent = navigator.userAgent.toLowerCase();  
           var bIsIpad = sUserAgent.match(/ipad/i) ==
    "ipad";    
           var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os";  
           var bIsMidp = sUserAgent.match(/midp/i) == "midp";  
           var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4";  
           var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb";  
           var bIsAndroid = sUserAgent.match(/android/i) == "android";  
           var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce";  
           var bIsWM = sUserAgent.match(/windows mobile/i) == "windows
    mobile";   
           if(bIsIpad){   
               var sUrl =
    location.href;      
               if(!bForcepc){   
                   window.location.href = "http://ipad.mail.163.com/";  
               }   
           }   
           if(bIsIphoneOs || bIsAndroid){   
               var sUrl =
    location.href;      
               if(!bForcepc){   
                   window.location.href = "http://smart.mail.163.com/";  
               }   
           }   
           if(bIsMidp||bIsUc7||bIsUc||bIsCE||bIsWM){   
               var sUrl =
    location.href;      
               if(!bForcepc){   
                   window.location.href = "http://m.mail.163.com/";  
               }   
           }   
       }  
       function
    fGetQuery(name){//获取参数值   
           var sUrl = window.location.search.substr(1);  
           var r = sUrl.match(new RegExp("(^|&)" + name +
    "=([^&]*)(&|$)"));  
           return (r == null ? null : (r[2]));  
       }  
       function
    fShowVerBlock(){     
           if(bForcepc){   
               document.getElementByIdx_x("dv_block").style.display = "block";  
           }   
           else{   
               document.getElementByIdx_x("ad_block").style.display = "block";  
           }   
       }  
       fBrowserRedirect();   
       </script>


php soap扩展简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息,下面我们来看看小编整理的php soap扩展开启与__soapCall使用问题

例子


<?php

try {

      $client = new SoapClient("http://localhost:8080/Webtest/NewService?wsdl");

 

//    $result = $client->__soapCall("operation",array(4));//fault

//    $result = $client->__soapCall("operation",array("id"=>4));//fault

//    $result = $client->operation(4);//fault

    $result = $client->operation(array("id"=>4));//OK

 

    $back = json_encode($result);

    echo $back;

} catch (SoapFault $fault){

    echo "Error: ",$fault->faultcode,", string: ",$fault->faultstring;

}
?>
//仅有标记为OK的那行可以成功返回数字4,其它返回的都是数字0(参数应该是没有传过去,服务器端id初始是0)。

//手册里soapcall的例子:

<?php


$client = new SoapClient("some.wsdl");

$client->SomeFunction($a, $b, $c);

 

$client->__soapCall("SomeFunction", array($a, $b, $c));

$client->__soapCall("SomeFunction", array($a, $b, $c), NULL,

new SoapHeader(), $output_headers);

 

 

$client = new SoapClient(null, array('location' => "http://localhost/soap.php",

'uri' => "http://test-uri/"));

$client->SomeFunction($a, $b, $c);

$client->__soapCall("SomeFunction", array($a, $b, $c));

$client->__soapCall("SomeFunction", array($a, $b, $c),

array('soapaction' => 'some_action',

'uri' => 'some_uri'));

?>

php本身对于多线程处理是不够理想的,但如果我们使用pthreads性能会有所提高了,下面来看一个PHP多线程pthreads使用例子


<?php
declare(ticks = 1);
$running = 1;
 
//信号处理函数
function sig_handler($signo)
{
  switch ($signo) {
  case SIGINT:
    finish();
    break;
  default:
    break;
  }
}
 
pcntl_signal(SIGINT, "sig_handler");
class test extends \Thread {
  public $url;
  public $result;
 
  public function __construct($url) {
    $this->url = $url;
  }
 
  public function run() {
    if ($this->url) {
      $this->result = model_http_curl_get($this->url);
    }
  }
}
function model_http_curl_get($url) {
  $curl = curl_init(); 
  curl_setopt($curl, CURLOPT_URL, $url); 
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
  curl_setopt($curl, CURLOPT_TIMEOUT, 5); 
  curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)'); 
  $result = curl_exec($curl); 
  curl_close($curl); 
  return $result; 
}
for ($i = 0; $i < 500; $i++) {
  $urls[] = 'http://www.baidu.com/s?wd='. rand(10000, 20000);
}
 
$pool = array();
for ($i=1;$i<=5;$i++) {
  $key = uniqid();
  $url = array_shift($urls);
  $pool[$key] = new test($url);
  $pool[$key]->start();
  echo "启动线程$key\n";
}
while ($urls && $running) {
  foreach ($pool as $key=>$worker) {
    if(! $worker->isRunning()){
      //unset($pool[$key]);
      echo "线程".$key."已结束\n";
      $url = array_shift($urls);
      $pool[$key] = new test($url);
      $pool[$key]->start();
      echo "启动线程$key\n";
    }
  }
  usleep(1000);
}
 
function finish() {
  global $running;
  global $pool;
  $running = 0;
  echo "接收到信号,等待运行中线程结束\n";
  foreach ($pool as $key=>$worker) {
    if ($pool[$key]->join()) {
      var_dump($pool[$key]->result);
    }
  }
}

在我们使用php实现文件下载时很多时间你会发现下载无法知道要下载文件的大但了,这个是开发者并未使用Accept-Length来获取下载文件大小了,下面我们一起来看看Accept-Length获取下载文件的大小例子
php中在做文件下载的时候,其中要加上这么一些header信息:
 
header("Content-type: application/octet-stream");

 

header("Accept-Ranges: bytes");

 

header("Accept-Length:".$fileSize);

 

header("Content-Disposition: attachment; filename=".$fileName);

 

我已经加了header("Accept-Length:".$fileSize);这句话,可是还是出现如下图的情况,获取不到下载文件的大小,虽然不影响正常的功能,但是为了追求完美,我要探个究竟。

 

 

 

Accept-Length下载获取不到文件大小

 

查手册,搜资料,最后才发现header("Accept-Length:***");这其实是一个误导,真不明白网上为什么千篇一律的都是Accept-Length。代潇瑞博客告诉大家,其实正确的应该是header("Content-Length:***"); 修改之后,果然就正确了,如下图的效果。

 

 

 

Content-Length下载获取到了文件大小

 

将Accept-Length改成Content-Length后,终于可以识别下载文件的大小了。
接口在php中用到的地方不多了,但接口又非常 的有用,下文我们就一起来看看PHP SPL标准库之接口(Interface)相关例子吧。


简介

SPL全称为(Standard PHP Library,PHP标准库),从官方文档上来看,SPL主要包含以下几块:
接口
数据结构
迭代器
异常
函数加强
ArrayObject
SqlFileInfo
 
一、接口

接口提供了对类的约束,在一个架构良好的类库中,通常都有设计非常好的接口定义,这里包括该抽象成接口的要抽象,同时避免接口滥用。在SPL里,主要的接口有以下几个:Countable,
OuterIterator,RecursiveIterator,SeekableIterator。

首先,这几个方法都继承自Iterator,复习下Iterator的定义:

1: Iterator extends Traversable {
2:
3: abstract public mixed current ( void )
4: abstract public scalar key ( void )
5: abstract public void next ( void )
6: abstract public void rewind ( void )
7: abstract public boolean valid ( void )
8: }

Countable明显是提供一个计数的约定,在Iterator之上,通过count方法获取集合中的数目。
OutIterator封装了Iterator,在此基础上添加了获取迭代器的方法。
RecursiceIterator在Iterator的基础上支持了迭代,新增检查和获取子节点的方法。
SeekIterator在Iterator基础上,新增了seek方法,用以获取指定位置的对象。

三、数据结构

SPL给PHP配置了一些加强的数据结构,使PHP看起来稍现代了点。添加的数据结构有以下几个:
双链表

队列
优先级队列

大顶堆
小顶堆
数组
定长数组
映射
对象映射

双链表(SplDoublyLinkedList),栈(SplStack),队列(SplQueue),优先级队列(SplPriorityQueue)都实现了Iterator接口,ArrayAccess接口,Countable接口。我们主要复习下ArrayAccess,我们以前使用的数组,可以看做是映射的 版本,而ArrayAccess,则是映射的版,也就是说,可以用这种方法来存取对象: arr[“one”]=1;  arr[obj1]=2;  继续看数据结构,双链表等在以上接口的基础上增加了pop,push等该接口常见的操作。
堆(SplHeap),大顶堆(SplMaxHeap),小顶堆(SplMinHeap)只继承了Iterator接口和Countable接口。值得一提的是,大顶堆和小顶堆是通过compare方法来将数据插入堆中,数据结构来维护堆的筛操作。
定长数组(SplFixedArray),常规的数组支持各种数据类型的键,并且长度可变,灵活的同时带来了性能的损耗。定长数组牺牲灵活性来换取性能。具体性能的测评可以看这里。

Coutable接口:
实现Countable接口的对象可用于count()函数计数。

class Mycount implements Countable
{
    public function count()
    {
        static $count = 0;
        $count++;
        return $count;
    }
}
 
$count = new Mycount();
$count->count();
$count->count();
 
echo count($count); //3
echo count($count); //4

说明:

调用count()函数时,Mycount::count()方法被调用
count()函数的第二个参数将不会产生影响

OuterIterator接口:
自定义或修改迭代过程。

//IteratorIterator是OuterIterator的一个实现类
class MyOuterIterator extends  IteratorIterator {
 
    public function current()
    {
        return parent::current() . 'TEST';
    }
}
 
foreach(new MyOuterIterator(new ArrayIterator(['b','a','c'])) as $key => $value) {
    echo "$key->$value".PHP_EOL;
}
/*
结果:
0->bTEST
1->aTEST
2->cTEST
*/

在实际运用中,OuterIterator极其有用:

$db = new PDO('mysql:host=localhost;dbname=test', 'root', 'mckee');
$db->query('set names utf8');
$pdoStatement = $db->query('SELECT * FROM test1', PDO::FETCH_ASSOC);
$iterator = new IteratorIterator($pdoStatement);
$tenRecordArray = iterator_to_array($iterator);
print_r($tenRecordArray);

RecursiveIterator接口:
用于循环迭代多层结构的数据,RecursiveIterator另外提供了两个方法:

RecursiveIterator::getChildren 获取当前元素下子迭代器
RecursiveIterator::hasChildren 判断当前元素下是否有迭代器

class MyRecursiveIterator implements RecursiveIterator
{
    private $_data;
    private $_position = 0;
 
    public function __construct(array $data) {
        $this->_data = $data;
    }
 
    public function valid() {
        return isset($this->_data[$this->_position]);
    }
 
    public function hasChildren() {
        return is_array($this->_data[$this->_position]);
    }
 
    public function next() {
        $this->_position++;
    }
 
    public function current() {
        return $this->_data[$this->_position];
    }
 
    public function getChildren() {
        print_r($this->_data[$this->_position]);
    }
 
    public function rewind() {
        $this->_position = 0;
    }
 
    public function key() {
        return $this->_position;
    }
}
 
$arr = array(0, 1=> array(10, 20), 2, 3 => array(1, 2));
$mri = new MyRecursiveIterator($arr);
 
foreach ($mri as $c => $v) {
    if ($mri->hasChildren()) {
        echo "$c has children: " .PHP_EOL;
        $mri->getChildren();
    } else {
        echo "$v" .PHP_EOL;
    }
 
}
/*
结果:
0
1 has children:
Array
(
    [0] => 10
    [1] => 20
)
2
3 has children:
Array
(
    [0] => 1
    [1] => 2
)
*/

SeekableIterator接口:
通过seek()方法实现可搜索的迭代器,用于搜索某个位置下的元素。

class  MySeekableIterator  implements  SeekableIterator  {
 
    private  $position = 0;
 
    private  $array  = array(
        "first element" ,
        "second element" ,
        "third element" ,
        "fourth element"
    );
 
    public function  seek ( $position ) {
        if (!isset( $this -> array [ $position ])) {
            throw new  OutOfBoundsException ( "invalid seek position ( $position )" );
        }
 
       $this -> position  =  $position ;
    }
 
    public function  rewind () {
        $this -> position  =  0 ;
    }
 
    public function  current () {
        return  $this -> array [ $this -> position ];
    }
 
    public function  key () {
        return  $this -> position ;
    }
 
    public function  next () {
        ++ $this -> position ;
    }
 
    public function  valid () {
        return isset( $this -> array [ $this -> position ]);
    }
}
 
try {
 
    $it  = new  MySeekableIterator ;
    echo  $it -> current (),  "\n" ;
 
    $it -> seek ( 2 );
    echo  $it -> current (),  "\n" ;
 
    $it -> seek ( 1 );
    echo  $it -> current (),  "\n" ;
 
    $it -> seek ( 10 );
 
} catch ( OutOfBoundsException $e ) {
    echo  $e -> getMessage ();
}
/*
结果:
first element
third element
second element
invalid seek position ( 10 )
*/

SplObserver和SplSubject接口:
SplObserver和SplSubject接口用来实现观察者设计模式,观察者设计模式是指当一个类的状态发生变化时,依赖它的对象都会收到通知并更新。使用场景非常广泛,比如说当一个事件发生后,需要更新多个逻辑操作,传统方式是在事件添加后编写逻辑,这种代码耦合并难以维护,观察者模式可实现低耦合的通知和更新机制。
看看SplObserver和SplSubject的接口结构:

//SplSubject结构 被观察的对象
interface SplSubject{
    public function attach(SplObserver $observer); //添加观察者
    public function detach(SplObserver $observer); //剔除观察者
    public function notify(); //通知观察者
}
 
//SplObserver结构 代表观察者
interface SplObserver{
    public function update(SplSubject $subject); //更新操作
}

看下面一个实现观察者的例子:

class Subject implements SplSubject
{
    private $observers = array();
 
    public function attach(SplObserver  $observer)
    {
        $this->observers[] = $observer;
    }
 
    public function detach(SplObserver  $observer)
    {
        if($index = array_search($observer, $this->observers, true)) {
            unset($this->observers[$index]);
        }
    }
 
    public function notify()
    {
        foreach($this->observers as $observer) {
            $observer->update($this);
        }
    }
 
 
}
 
class Observer1 implements  SplObserver
{
    public function update(SplSubject  $subject)
    {
        echo "逻辑1代码".PHP_EOL;
    }
}
 
class Observer2 implements  SplObserver
{
    public function update(SplSubject  $subject)
    {
        echo "逻辑2代码".PHP_EOL;
    }
}
 
 
$subject = new Subject();
$subject->attach(new Observer1());
$subject->attach(new Observer2());
 
$subject->notify();
/*
结果:
逻辑1代码
逻辑2代码
*/

[!--infotagslink--]

相关文章

  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • php根据用户语言跳转相应网页

    当来访者浏览器语言是中文就进入中文版面,国外的用户默认浏览器不是中文的就跳转英文页面。 <&#63;php $lan = substr(&#8194;$HTTP_ACCEPT_LANGUAGE,0,5); if ($lan == "zh-cn") print("<meta http-equiv='refresh' c...2015-11-08
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
  • php导出csv格式数据并将数字转换成文本的思路以及代码分享

    php导出csv格式数据实现:先定义一个字符串 存储内容,例如 $exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."/n";然后对需要保存csv的数组进行foreach循环,例如复制代...2014-06-07
  • ecshop商品无限级分类代码

    ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25
  • 几种延迟加载JS代码的方法加快网页的访问速度

    本文介绍了如何延迟javascript代码的加载,加快网页的访问速度。 当一个网站有很多js代码要加载,js代码放置的位置在一定程度上将会影像网页的加载速度,为了让我们的网页加载速度更快,本文总结了一下几个注意点...2013-10-13
  • php有效防止同一用户多次登录

    【问题描述】:同一用户在同一时间多次登录如果不能检测出来,是危险的。因为,你无法知道是否有其他用户在登录你的账户。如何禁止同一用户多次登录呢? 【解决方案】 (1) 每次登录,身份认证成功后,重新产生一个session_id。 s...2015-11-24