PHP ob_start()ob_gzhandler()

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

          ob_start(); //打開沖區(qū)  

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

           

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

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

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

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

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

          看看能用ob系列函數(shù)做些什么……  

          態(tài)模版技  

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

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

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

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

          PHP4.0里面加入了沖區(qū)控制的幾個函數(shù)

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

          例分析
          1沖區(qū)控制的函數(shù)防止文件頭發(fā)送信息出

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

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

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

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

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

          深入了解  

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

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

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網(wǎng)站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 916098
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 克什克腾旗| 清原| 怀安县| 抚州市| 太和县| 东阿县| 修文县| 浑源县| 出国| 上蔡县| 峨边| 息烽县| 岗巴县| 崇文区| 馆陶县| 库车县| 峡江县| 吴川市| 旺苍县| 偃师市| 全椒县| 张家口市| 丰原市| 临夏县| 万宁市| 荣成市| 普安县| 石城县| 环江| 寿宁县| 清新县| 乌兰察布市| 莒南县| 清远市| 江孜县| 正宁县| 清徐县| 泗水县| 柘城县| 遵义县| 商南县|