PHP ob_start()ob_gzhandler()

          Output Control 函數可以你自由控制腳本中數據的它非常地有用特別是當你想在數據已經輸出后出文件的情況出控制函數不使用 header() setcookie(),  
          送的文件信息生影響,那些類似于 echo() PHP 的數據有作用   

          ob_start(); //打開沖區  

          echo "Hello\n"; //  
          header(“location:index.php”); //瀏覽器重定向到index.php  
          ob_end_flush();//出全部內容到瀏覽  

           

          所有header()函數有了解的人都知道個函數會送一段文件頭給瀏覽但是如果在使用個函數之前已有了任何包括空比如空格就會提示出如果我去掉第一行的ob_start()行此程序發現得到了一條錯誤提示“Header had  all ready send by”但是加上ob_start就不會提示出原因是當打開了沖區echo后面的字符不會出到瀏覽而是保留在服直到你使用flush或者ob_end_flush才會所以并不會有任何文件頭輸出的錯誤  

            
          for($i = 1; $i <= 300; $i++ ) print(“ “);  
          // 一句非常關cache使得它的內容只有到一定的大小才能從瀏覽器里 言之如果cache的內容不到一定的大小它是不會在程序行完出的 過測試發現這個大小的底限是256個字符意味著cache以后接收的內容都會 源源不斷的被送出去  
          For($j = 1; $j <= 20; $j++) {  
          echo $j.””;  
          flush(); //一部會使cache新增的內容被出去示到瀏覽器上  
          sleep(1); //程序一秒你把效果看得更清楚  
          }  
          ?>  
          如果在程序的首部加入ob_implicit_flush()打開絕對刷新,就可以在程序中不再使用flush(),這樣做的好提高效率  

          2. 關于ob系列函數  
          我想先引用我的好朋友y10k的一個例子  

          比如你用得到服器和客端的置信息但是個信息會因端的不同而不同如果想要保存phpinfo()函數的出怎么在沒有沖區控制之前可以一點法也沒有但是有了
          沖區的控制可以松的解決  
          -------------------------------------------------------------  
          ob_start(); //打開沖區  
          phpinfo(); //使用phpinfo函數  
          $info=ob_get_contents(); //得到沖區的內容并且$info  
          $file=fopen('info.txt','w'); //打開文件info.txt  
          fwrite($file,$info); //寫入信息到info.txt  
          fclose($file); //文件info.txt  
          ?>  
          -------------------------------------------------------------  
          用以上的方法就可以把不同用phpinfo信息保存下來在以前恐怕沒有
          面就是將一些
          函數的方法  

          可能在大家ob_start()的功能有了一定的了解上面的一個例子看似簡單實際上已掌握了使用ob_start()的要點  
          <1>.使用ob_start打開browsercache這樣可以保cache的內容在你調flush(),ob_end_flush()或程序行完之前不會被  
          <2>.在的你應該知道你所有的可以在任何出內容后面使用header,setcookie以及sessionob_start一個很大的特點也可以使用ob_start的參數cache被寫入后然后自行命令比如ob_start("ob_gzhandler")而我最常用的做法是用ob_get_contents()
          cache中的內容然后再……  
          <3>.理完可以使用各種方法flush(),ob_end_flush(),以及等到程序行完后的自動輸當然如果你用的是ob_get_contents()那么就要你自己控制出方式了  

          看看能用ob系列函數做些什么……  

          模版技  

          模版技就是通某種方式使得用client端得到的是由PHP生的html如果html面不會再被更新那么當另外的用再次瀏覽程序將不會再調PHP以及相關的數據于某些信息量比大的網站例如sina,163,sohu類似種的技術帶來的好是非常巨大的  

          我所知道的實現態輸出的有兩種  
          <1>.y10k修改的phplib的一個叫template.inc.php實現  
          <2>.使用ob系列函數實現  
          于第一種方法不是篇文章所要研究的問題所以不再  
          們現在來看一看第二種方法的具體實現  
          ob_start();//打開沖區  
          php面的全部  
          $content = ob_get_contents();//取得php出的全部內容  
          $fp = fopen(“output00001.html”, “w”); //建一個文件并打開寫入  fwrite($fp, $content); //php面的內容全部寫入output00001.html然后……  
          fclose($fp);  

          PHP4.0提供了一個沖函數集合沖支持允你寫包裹函數功能壓縮緩沖區PHP4沖支持允HTML信息存放, HTML的正文是否但在PHP信息header(), content type, and cookies不采用

          在使用PHP程中不免要使用到headersetcookie兩個函數兩個函數會送一段文件信息給瀏覽但是如果在使用兩個函數之前已有了任何包括空比如空格就會提示出提示信息如下“Header   had   all   ready   send   by”

          PHP4.0里面加入了沖區控制的幾個函數

          函數名稱ob_start
          函數格式void ob_start(void)
          功能打開沖區
          沖區激活所有來自PHP程序的非文件信息均不會而是保存在內部沖區沖區的內容可以使用ob_end_flush()或者使用ob_end_clean()沖區的內容

          例分析
          1沖區控制的函數防止文件頭發送信息出

          <?   //PHP提示符
          ob_start();   //打開沖區
          echo   "Welcome   /n";   //
          header("location:next.php");   //瀏覽器重定向到next.php
          ?>   

          如果去掉ob_startPHP就會提示在文件的第4行出信息“Header   had   all   ready   send   by”但是加上ob_start就不會提示出原因是當打開了沖區echo后面的字符不會出到瀏覽而是保留在服器的沖區中直到你使用flush或者ob_end_flush才會所以并不會出文件出的錯誤  
          PHP4.0.4有一個新的存句柄ob_gzhandler它與前面的類相似但用法不同使用ob_gzhandler要在php.ini中加入的內容如下   
          output_handler   =   ob_gzhandler   ;   
          行代使得PHP激活壓縮送出去的所有內容如果由于某種原因你不想在php.ini中加上行代可以通PHP源文件所在目.htaccess文件改的服器行壓縮),法如下   
          php_value   output_handler   ob_gzhandler   
          或者是從PHP碼調如下所示   
          ob_start("ob_gzhandler");   

          采用存句柄的方法確非常有效而且不會來什么特殊的但必注意的是Netscape   Communicator對壓縮圖形的支持不佳因此除非你能夠保所有用都使用IE瀏覽應該禁止壓縮JPEGGIF一般地于所有其他文件壓縮都有效但建針對各種瀏覽器都分別測試特別是當你使用了特殊的插件或者數據看器時這一點尤其重要   

          使用前面介的各種技你能夠著地改善網站的性能表應該注意的是   PHP可能是也可能不是性能瓶所在必仔察每一個和用性能有關的因素比如數據   
          單純使用本文技只能在一定限度之內提高Web器的性能因此在咎于PHP以及它的存之前不妨看看是否應該器以及是否可以引入負載平衡技后者需要大的投   
          不要低估內容壓縮的作用雖然你在100   MB/sLAN接下看到Web用響非常迅速但使用Modem接的用不會只會抱怨你那100   KbHTML

          相關函數  
          1Flush刷新沖區的內容  
          函數格式flush()  
          個函數常使用效率很高  
          2ob_start 打開沖區  
          函數格式void ob_start(void)  
          沖區激活所有來自PHP程序的非文件信息均不會而是保存在內部沖區
          沖區的內容可以使用ob_end_flush()flush()沖區的內容  
          3 ob_get_contents 返回內部沖區的內容  
          使用方法string ob_get_contents(void)  
          個函數會返回當前沖區中的內容如果沖區沒有激活返回 FALSE   
          4ob_get_length返回內部沖區的  
          使用方法int ob_get_length(void)  
          個函數會返回當前沖區中的ob_get_contents如果沖區沒有激
          返回 FALSE  
          5ob_end_flush 送內部沖區的內容到瀏覽并且關閉輸沖區  
          使用方法void ob_end_flush(void)  
          個函數沖區的內容如果有的  
          6ob_end_clean除內部沖區的內容并且關內部沖區  
          使用方法void ob_end_clean(void)  
          個函數不會出內部沖區的內容而是把它  
          7ob_implicit_flush打開或關閉絕對刷新  
          使用方法void ob_implicit_flush ([int flag])  
          使用Perl的人都知道$│=x的意個字符串可以打開/閉緩沖區ob_implicit_flush函數也和那個一認為閉緩沖區打開絕對輸出后每個腳本出都直接送到瀏覽不再需要調 flush()  

          深入了解  

          1. 關于Flush函數  
          個函數在PHP3中就出是一個效率很高的函數他有一個非常有用的功能就是刷新browsercache.們舉一個行效果非常明的例子來flush.

          posted on 2011-12-14 18:01 -274°C 閱讀(1288) 評論(0)  編輯  收藏 所屬分類: PHP

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 914052
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 高阳县| 安康市| 巫溪县| 榆社县| 佛教| 哈巴河县| 石林| 哈尔滨市| 香格里拉县| 伊金霍洛旗| 民权县| 家居| 青田县| 屏山县| 奎屯市| 靖边县| 府谷县| 久治县| 正宁县| 大港区| 旺苍县| 白玉县| 建瓯市| 东港市| 洛南县| 金华市| 延庆县| 曲松县| 漳州市| 青海省| 兖州市| 克东县| 治县。| 财经| 大洼县| 苍山县| 巴塘县| 布尔津县| 南京市| 德州市| 吉安市|