<output id="r87xx"></output>
    1. 
      
      <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
        •   

               當(dāng)前位置:首頁>軟件介紹>PHP的頁面緩沖處理機(jī)制 查詢:
               
          PHP的頁面緩沖處理機(jī)制

          PHP有很多機(jī)制、函數(shù),其實(shí)就是魔術(shù)師,重復(fù)發(fā)揮好,其實(shí)甚至是簡單應(yīng)用,就會出現(xiàn)神奇的效果。這里講一個(gè)ob_start()函數(shù)。

          ob_start()函數(shù)用于打開緩沖區(qū),比如header()函數(shù)之前如果就有輸出,包括回車空格換行都會有”Header had all ready send by”的錯誤,這時(shí)可以先用ob_start()打開緩沖區(qū)PHP代碼的數(shù)據(jù)塊和echo()輸出都會進(jìn)入緩沖區(qū)而不會立刻輸出.當(dāng)然打開緩沖區(qū)的作用很多,只要發(fā)揮你的想象.可以總結(jié)以下四點(diǎn):

          1.用于header()之前

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

          echo ”Hellon”; //輸出

          header(”location:index.php”); //把瀏覽器重定向到index.php

          ob_end_flush();//輸出全部內(nèi)容到瀏覽器

          ?>

          2.phpinfo()函數(shù)可獲取客戶端和服務(wù)器端的信息,但要保存客戶端信息用緩沖區(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

          ?>

          3.靜態(tài)頁面技術(shù)

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

          ?>

          php頁面的全部輸出

          $content = ob_get_contents();//取得php頁面輸出的全部內(nèi)容

          $fp = fopen(”output00001.html”, “w”); //創(chuàng)建一個(gè)文件,并打開,準(zhǔn)備寫入

          fwrite($fp, $content); //把php頁面的內(nèi)容全部寫入output00001.html,然后……

          fclose($fp);

          ?>

          4.輸出代碼

          Function run_code($code) {

          If($code) {

          ob_start();

          eval($code);

          $contents = ob_get_contents();

          ob_end_clean();

          }else {

          echo “錯誤!沒有輸出”;

          exit();

          }

          return $contents;

          }

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

          我們先舉一個(gè)簡單的例子,讓大家對Output Control有一個(gè)大致的印象:

          Example 1.

          CODE<?php

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

          echo ”Hellon”; //輸出

          header(”location:index.php”); //把瀏覽器重定向到index.php

          ob_end_flush();//輸出全部內(nèi)容到瀏覽器

          ?>

          所有對header()函數(shù)有了解的人都知道,這個(gè)函數(shù)會發(fā)送一段文件頭給瀏覽器,但是如果在使用這個(gè)函數(shù)之前已經(jīng)有了任何輸出(包括空輸出,比如空格,回車和換行)就會提示出錯。如果我們?nèi)サ舻谝恍械膐b_start(),再執(zhí)行此程序,我們會發(fā)現(xiàn)得到了一條錯誤提示:”Header had all ready send by”!但是加上ob_start,就不會提示出錯,原因是當(dāng)打開了緩沖區(qū),echo后面的字符不會輸出到瀏覽器,而是保留在服務(wù)器,直到你使用 flush或者ob_end_flush才會輸出,所以并不會有任何文件頭輸出的錯誤!

          一、相關(guān)函數(shù)簡介:

          1、Flush:刷新緩沖區(qū)的內(nèi)容,輸出。

          函數(shù)格式:flush()

          說明:這個(gè)函數(shù)經(jīng)常使用,效率很高。

          2、ob_start :打開輸出緩沖區(qū)

          函數(shù)格式:voidob_start(void)

          說明:當(dāng)緩沖區(qū)激活時(shí),所有來自PHP程序的非文件頭信息均不會發(fā)送,而是保存在內(nèi)部緩沖區(qū)。為了輸出緩沖區(qū)的內(nèi)容,可以使用ob_end_flush()或flush()輸出緩沖區(qū)的內(nèi)容。

          3 、ob_get_contents :返回內(nèi)部緩沖區(qū)的內(nèi)容。

          使用方法:stringob_get_contents(void)

          說明:這個(gè)函數(shù)會返回當(dāng)前緩沖區(qū)中的內(nèi)容,如果輸出緩沖區(qū)沒有激活,則返回 FALSE 。

          4、ob_get_length:返回內(nèi)部緩沖區(qū)的長度。

          使用方法:intob_get_length(void)

          說明:這個(gè)函數(shù)會返回當(dāng)前緩沖區(qū)中的長度;和ob_get_contents一樣,如果輸出緩沖區(qū)沒有激活。則返回 FALSE。

          5、ob_end_flush :發(fā)送內(nèi)部緩沖區(qū)的內(nèi)容到瀏覽器,并且關(guān)閉輸出緩沖區(qū)。

          使用方法:voidob_end_flush(void)

          說明:這個(gè)函數(shù)發(fā)送輸出緩沖區(qū)的內(nèi)容(如果有的話)。

          6、ob_end_clean:刪除內(nèi)部緩沖區(qū)的內(nèi)容,并且關(guān)閉內(nèi)部緩沖區(qū)

          使用方法:voidob_end_clean(void)

          說明:這個(gè)函數(shù)不會輸出內(nèi)部緩沖區(qū)的內(nèi)容而是把它刪除!

          7、ob_implicit_flush:打開或關(guān)閉絕對刷新

          使用方法:voidob_implicit_flush ([int flag])

          說明:使用過Perl的人都知道$|=x的意義,這個(gè)字符串可以打開/關(guān)閉緩沖區(qū),而ob_implicit_flush 函數(shù)也和那個(gè)一樣,默認(rèn)為關(guān)閉緩沖區(qū),打開絕對輸出后,每個(gè)腳本輸出都直接發(fā)送到瀏覽器,不再需要調(diào)用 flush()

          二、深入了解:

          1. 關(guān)于Flush函數(shù):

          這個(gè)函數(shù)在PHP3中就出現(xiàn)了,是一個(gè)效率很高的函數(shù),他有一個(gè)非常有用的功能就是刷新browser的cache.我們舉一個(gè)運(yùn)行效果非常明顯的例子來說明flush.

          Example 2.

          CODE<?php

          for($i = 1; $i<= 300; $i++ ) print(” “);

          // 這一句話非常關(guān)鍵,cache的結(jié)構(gòu)使得它的內(nèi)容只有達(dá)到一定的大小才能從瀏覽器里輸出

          // 換言之,如果cache的內(nèi)容不達(dá)到一定的大小,它是不會在程序執(zhí)行完畢前輸出的。經(jīng)

          // 過測試,我發(fā)現(xiàn)這個(gè)大小的底限是256個(gè)字符長。這意味著cache以后接收的內(nèi)容都會

          // 源源不斷的被發(fā)送出去。

          For($j = 1; $j <= 20; $j++) {

          echo $j.”“;

          flush(); //這一部會使cache新增的內(nèi)容被擠出去,顯示到瀏覽器上

          sleep(1); //讓程序”睡”一秒鐘,會讓你把效果看得更清楚

          }

          ?>

          具體效果你可以到這里看看[url]~uchinaboy/out.php[/url]

          PHP2000的最新的PHP聊天室就是用的這個(gè)技術(shù),可惜的是源代碼未公開 L

          注:如果在程序的首部加入ob_implicit_flush()打開絕對刷新,就可以在程序中不再使用flush(),這樣做的好處是:提高效率!

          2. 關(guān)于ob系列函數(shù):

          我想先引用我的好朋友y10k的一個(gè)例子:

          Example 3.

          比如你用得到服務(wù)器和客戶端的設(shè)置信息,但是這個(gè)信息會因?yàn)榭蛻舳说牟煌煌?如果想要保存phpinfo()函數(shù)的輸出怎么辦呢?在沒有緩沖區(qū)控制之前,可以說一點(diǎn)辦法也沒有,但是有了緩沖區(qū)的控制,我們可以輕松的解決:

          CODE<?php

          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ù)”的方法!

          或許有人會問:”難道就這個(gè)樣子嗎?還有沒有其他用途?”當(dāng)然有了,比如筆者論壇的PHP 語法加亮顯示就和這個(gè)有關(guān)(PHP默認(rèn)的語法加亮顯示函數(shù)會直接輸出,不能保存結(jié)果,如果在每次調(diào)用都顯示恐



          PHP用戶注冊與登錄php調(diào)用linux計(jì)劃任務(wù)
          php里session的用法php在百度的發(fā)展歷程
          php中關(guān)于引用(&)詳解 PHP正則表達(dá)式的幾則使用技巧
          細(xì)說PHP模板引擎windows下PHP運(yùn)行環(huán)境安裝詳解
          js與php調(diào)用PHP與ASP.NET的比較
          PHP基本語法補(bǔ)充案例PHP簡明教程
          php開源框架分析PHP文件刪除程序
          php陰歷程序寶典php驗(yàn)證碼制作
          信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
          • 勁爆價(jià):
            不限功能
            不限用戶
            1998元/年

          • 微信客服

            <output id="r87xx"></output>
          1. 
            
            <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
              • 日韩在线第二页 | 中文字幕久久无码 | 色婷婷影院 | 日韩欧美中文字幕在线观看 | 国产中文在线 | 91丨国产亚洲丨精品白丝 | 青青草手机视频在线 | 国产视频A| 97国产超碰在线观看 | 中文字幕无码在线视频 |