您当时的方位:主页 > 言语编程 > PHP

PHP-Push技能完成改写功用

2014-08-18  www.codeforacause.net
  Server push 前一段时刻炒得很热的“推”技能,不过网上大部分都是cgi的材料,偶然看到一个法国的网站上有这么个介绍,惋惜法语看不懂,只能从他的程序中看懂点东西,现收拾个比方出来咱们学习一下。能够用于聊天室的数据传输、网站上的新闻更新、等等各类更新频频的页面。



  曾经做改写首要经过页面上加标签。

   < META HTTP-EQUIV=REFRESH CONTENT="time;URL=url" >

  或许运用javascript的timeout+reload,不过这种改写的方法取决于时刻的设定,无法接连的数据传输且时刻欠好确认。采用了Server push的服务器在客户机做出一个恳求后,和客户机树立一个永久的衔接,然后服务器会依据客户机的恳求不断地把数据包面向服务器。那些你察觉不到的推迟会让你觉得服务器的呼应和你的恳求现已达到了同步的程度。

  先来看一下比方再解说。

   img.ph



    < ?ph



      set_time_limit(0);



      $file = "./1.jpg";



      $sep = "gIrLsKiCkAsSiTsAySsOoNaTsHiRt";



    if(ereg(".*MSIE.*",$HTTP_SERVER_VARS["HTTP_USER_AGENT"])){



    //如果是ie浏览器,直接输出就退出,IE的不支持哦,我没试出来过



      header("Cache-Control: no-cache");



      header("Pragma: no-cache");



      header("Content-type: image/jpeg");



      header("Content-size: " . filesize($file));



      readfile($file);



    }else{



      header("Content-Type: multipart/x-mixed-replace; boundary=$sep");



    //这里是要害哦,看看MIME类型阐明



  //你会理解



    print "--$se



  ";



    do{



      print "Content-Type: image/jpeg



  ";



      readfile($file);



      print "



  --$se



  ";



      flush();



      $mt = filemtime($file);



      do{



        sleep (1);



        clearstatcache();



       }while($mt == filemtime($file));



    }while(1);



  }



  ? >

  这便是一个永久履行的页面(网络不断的情况下),不断输出图片的内容,下面是调用的页面。
  运用中你会发现个问题:怎样图片不自动更新了。这是因为客户机在一段时刻内没有对服务器发作恳求,也便是某一段时刻内没有新的内容向浏览器输入,可能发作衔接超时现象。什么方法处理呢?能够在履行页面中加个向浏览器发送一个空信号,相似ftp衔接方法,上面页面中在do...while(1)间加个print("");

  看完这个比方,应该知道怎样处理不断更新的内容了,要害在img.php页面中的处理(能够是检查新的内容并输出),调用的时分能够有img、script、frame等等。具体的其他运用方面请检查:http://www.npds.org/。