<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    PHP ob_start()ob_gzhandler()

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

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

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

     

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

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

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

    比如你用得到服務(wù)器和客端的設(shè)置信息但是個(gè)信息會(huì)因端的不同而不同如果想要保存phpinfo()函數(shù)的出怎么在沒有沖區(qū)控制之前可以一點(diǎn)法也沒有但是有了
    沖區(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); //關(guān)文件info.txt  
    ?>  
    -------------------------------------------------------------  
    用以上的方法就可以把不同用phpinfo信息保存下來在以前恐怕沒有實(shí)
    面就是將一些
    轉(zhuǎn)函數(shù)的方法  

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

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

    態(tài)模版技術(shù)  

    簡(jiǎn)態(tài)模版技術(shù)就是通某種方式使得用client端得到的是由PHP產(chǎn)生的html如果個(gè)html面不會(huì)再被更新那么當(dāng)另外的用再次瀏覽時(shí)程序?qū)⒉粫?huì)再調(diào)PHP以及相關(guān)的數(shù)據(jù)庫(kù)對(duì)于某些信息量比大的網(wǎng)站例如sina,163,sohu類似種的技術(shù)帶來的好是非常巨大的  

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

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

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

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

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

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

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

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

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

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

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

    深入了解  

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

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

    常用鏈接

    留言簿(21)

    隨筆分類(265)

    隨筆檔案(242)

    相冊(cè)

    JAVA網(wǎng)站

    關(guān)注的Blog

    搜索

    •  

    積分與排名

    • 積分 - 914243
    • 排名 - 40

    最新評(píng)論

    主站蜘蛛池模板: 一区二区三区四区免费视频 | 日本一区二区三区日本免费| 亚洲av无码成h人动漫无遮挡| 猫咪www免费人成网站| 处破痛哭A√18成年片免费| 亚洲一区二区三区国产精华液| 久久精品免费全国观看国产| ww亚洲ww在线观看国产| 成人免费毛片内射美女APP| 亚洲国产精品综合久久20| 欧美大尺寸SUV免费| 亚洲无人区码一二三码区别图片| 成年女人喷潮毛片免费播放| 亚洲人成www在线播放| 毛片a级毛片免费播放100| 亚洲久热无码av中文字幕| 国产免费69成人精品视频| 九九免费久久这里有精品23| 亚洲区小说区图片区| 久久高潮一级毛片免费| 亚洲高清国产拍精品26U| 四虎最新永久免费视频| 亚洲精品无码久久久久APP| 亚洲国产人成精品| 99热精品在线免费观看| 亚洲伊人久久大香线蕉啊| 国产又大又黑又粗免费视频 | 亚洲av无码天堂一区二区三区| 亚洲精品无码不卡在线播HE| 亚洲国产成人精品无码区二本| 免费国产在线观看老王影院| sihu国产精品永久免费| 亚洲卡一卡2卡三卡4卡无卡三| 91热成人精品国产免费| 色噜噜的亚洲男人的天堂| 亚洲av无码国产精品色午夜字幕| 黄色片在线免费观看| gogo免费在线观看| 亚洲国产精品午夜电影| 亚洲欧洲日产国码高潮αv| 91福利视频免费|