亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP使用OB函數控制輸出緩存 生成HTML靜態文件

2020-03-22 18:04:20
字體:
來源:轉載
供稿:網友
  • 在開始之前還是提一下三個函數吧:"ob_start()、ob_end_clean()、ob_get_contents()"

    ob_start():是打開緩沖區的,就是要把您需要生成的靜態文件的內容緩存在這里;
    ob_get_contents():是讀出緩沖區里的內容,下面有代碼為例;
    ob_end_clean():這個比較重要,只有使用了這個函數后,緩沖區里的內容才會讀取出來;

    <?phpif(file_exists("./index.htm"))//看靜態index.htm文件是否存在{$time=time(); //文件修改時間和現在時間相差?的話,直接導向htm文件,否則重新生成htmif($time-filemtime("./index.htm")< 600){header("Location:html' target='_blank'>classhtml/main.htm"); }}//在你的開始處加入ob_start();//首頁內容,就是你的動態部分了//在結尾加入ob_end_clean(),并把本頁輸出到一個變量中$temp=ob_get_contents();ob_end_clean();//寫入文件$fp=fopen("./index.htm", 'w');fwrite($fp,$temp) or die('寫文件錯誤');//echo"生成HTML完成!";


    實例說明

    使用ob_start()控制緩沖,給頁面做文件緩存,加速頁面響應。
    我們可能都有這樣的經驗,用php寫了一個打開好幾個數據庫,幾十次數據查詢的首頁,速度慢是可想而知啊,但是這個頁面不大好做模板生成靜態頁,太麻煩了。怎么辦了?我使用了這個解決方案,控制php的輸出緩沖,截獲處理后的html,保存成文件,然后的請求就檢查這個文件的時間,若在設置的時間內,直接讀取,發送。如果已經超時,就重新讀取動態頁面。

    <?php// ————————————————————————–// 文件名 : index.php// 描述 : 主站首頁// 需求 : PHP5 (http://www.php.net)// Copyright(C), www.4u4v.net, 2012, All Rights Reserved.// 作者 : 水木 (admin@4u4v.net)// ————————————————————————–// 緩存文件名和緩存時間$cachefilename = './cache/index.cache';$cachetime = 3600;// 強制更新緩存if ( $_GET['c'] ){echo CacheFile();die();}// 檢測緩存是否存在if ( file_exists( $cachefilename ) ){$lastmodifytime = filemtime( $cachefilename );if ( $lastmodifytime && ( time() – $lastmodifytime ) > $cachetime ){echo CacheFile();}else{echo ReadCache();}}else{echo CacheFile();}//生成HTML并緩存成文件function CacheFile(){global $cachefilename;// 打開輸出緩存ob_start();//這里開始鏈接數據庫,查詢,用ADODB+SMARTY技術。$tpl->Display( "index.html" );//處理完成,截獲緩沖內容//得到緩存內容$content=ob_get_contents();//清空緩沖區,否則最終還是會輸出給瀏覽器,這樣就會有兩個首頁了ob_end_clean();//寫入文件,若不可寫則返回緩存if(is_writable($cachefilename)){$handle = fopen($cachefilename,"w");fwrite($handle,$content);fclose($handle);}else{return ReadCache()." outdated";}return $content.'newcache';}//讀取緩存文件function ReadCache(){global $cachefilename;$handle=fopen($cachefilename,"r");$content="";while (!feof($handle)){$line = fgets($handle);$content.=$line;}fclose($handle);return $content.'cached at '.date("Y-m-d H:i:s",filemtime($cachefilename));}


    用PHP的ob_start()控制您的瀏覽器cache

    Output Control 函數可以讓你自由控制腳本中數據的輸出。它非常地有用,特別是對于:當你想在數據已經輸出后,再輸出文件頭的情況。輸出控制函數不對使用 header() 或 setcookie(), 發送的文件頭信息產生影響,只對那些類似于 echo() 和 PHP 代碼的數據塊有作用。
    我們先舉一個簡單的例子,讓大家對Output Control有一個大致的印象:
    Example 1.

    <?phpob_start(); //打開緩沖區echo "Hello"; //輸出header("location:index.php"); //把瀏覽器重定向到index.phpob_end_flush();//輸出全部內容到瀏覽器?>

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

    Output Buffering相關函數簡介

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

    再舉個例子,關于Flush函數的:

    這個函數在PHP3中就出現了,是一個效率很高的函數,他有一個非常有用的功能就是刷新browser的cache.我們舉一個運行效果非常明顯的例子來說明flush.
    Example 2.

    <?phpfor($i = 1; $i <= 300; $i++ ) print(" ");// 這一句話非常關鍵,cache的結構使得它的內容只有達到一定的大小才能從瀏覽器里輸出// 換言之,如果cache的內容不達到一定的大小,它是不會在程序執行完畢前輸出的。經// 過測試,我發現這個大小的底限是256個字符長。這意味著cache以后接收的內容都會// 源源不斷的被發送出去。For($j = 1; $j <= 20; $j++) {echo $j." ";flush(); //這一部會使cache新增的內容被擠出去,顯示到瀏覽器上sleep(1); //讓程序"睡"一秒鐘,會讓你把效果看得更清楚

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    欧美精品生活片| 另类图片亚洲另类| 91中文精品字幕在线视频| 中文字幕欧美精品在线| 粉嫩老牛aⅴ一区二区三区| 日韩av在线高清| 中文字幕久久亚洲| 在线成人激情视频| 97视频色精品| 久久影视电视剧免费网站清宫辞电视| 精品久久久久久久久久国产| 欧美在线精品免播放器视频| 欧美福利视频在线观看| 国产成人精品免高潮费视频| 午夜精品一区二区三区在线视| 久久国产精品久久精品| 日韩久久免费视频| 亚洲国产91色在线| 欧美精品一区二区三区国产精品| 欧美亚洲另类激情另类| 国产精品第二页| 亚洲国产一区二区三区四区| 日韩精品在线视频观看| 国产免费一区二区三区在线观看| 成人国内精品久久久久一区| 97在线看免费观看视频在线观看| 日韩免费av在线| 亚洲精品国精品久久99热| 欧美日韩国产精品专区| 亚洲男人天堂2023| 亚洲欧洲中文天堂| 国产精品美女久久久久久免费| 久久久久久尹人网香蕉| 国产日韩欧美日韩大片| 久久久国产一区二区| 欧美性受xxxx黑人猛交| 国产在线拍偷自揄拍精品| 中文字幕v亚洲ⅴv天堂| 中文字幕日韩高清| 91在线视频导航| 久久久精品久久久久| 久久精品视频中文字幕| 日韩美女视频中文字幕| 亚洲女人被黑人巨大进入al| 国产成人极品视频| 国产一区二区三区视频在线观看| 亚洲高清福利视频| 在线色欧美三级视频| 亚洲色图狂野欧美| 亚洲成av人乱码色午夜| 久久久综合免费视频| 精品欧美激情精品一区| 国产第一区电影| 国产精品pans私拍| 国产精品久久国产精品99gif| 这里只有精品久久| 国产99视频在线观看| 欧洲永久精品大片ww免费漫画| 欧美日韩在线视频一区| 92国产精品久久久久首页| 国产精品稀缺呦系列在线| 久久在线免费视频| 欧美日韩另类在线| 美女av一区二区三区| 91精品视频在线| 综合国产在线视频| 久久精视频免费在线久久完整在线看| 亚洲美女久久久| 久久天天躁狠狠躁老女人| 色一情一乱一区二区| 正在播放国产一区| 日韩成人在线观看| 91欧美激情另类亚洲| 亚洲在线观看视频| 精品久久久久久久久久久久久久| 亚洲无线码在线一区观看| 国产精品日日摸夜夜添夜夜av| 91精品91久久久久久| 亚洲精品乱码久久久久久金桔影视| 国产日韩精品在线播放| 久久五月情影视| 久久久久久久久电影| 日韩性xxxx爱| 97免费视频在线| 国产精品激情av在线播放| 色婷婷**av毛片一区| 日韩欧美一区二区三区久久| 26uuu国产精品视频| 97在线视频免费播放| 国产日韩精品一区二区| 97国产精品久久| 久久亚洲成人精品| 欧美激情一级精品国产| 久久久影视精品| 精品美女国产在线| 日韩精品视频免费专区在线播放| 久久在线免费视频| 久久天堂电影网| 亚洲成色www8888| 91久久久在线| 久久香蕉精品香蕉| 俺去亚洲欧洲欧美日韩| 精品无码久久久久久国产| 日韩av一区二区在线观看| 日韩电影视频免费| 精品福利在线观看| 久久综合伊人77777| 欧美性xxxx| 久久精品电影网| 亚洲激情在线观看视频免费| 欧美成人国产va精品日本一级| 992tv成人免费影院| 国产精品羞羞答答| 欧美日韩国产精品专区| 亚洲高清色综合| 亚洲乱码一区av黑人高潮| 国产香蕉97碰碰久久人人| 久久久国产一区二区三区| 中文字幕欧美日韩在线| 亚洲欧美日韩第一区| 亚洲欧美国产日韩天堂区| 国精产品一区一区三区有限在线| 国精产品一区一区三区有限在线| 欧美最近摘花xxxx摘花| 尤物九九久久国产精品的分类| 色婷婷成人综合| 国产亚洲精品久久久久久777| 欧美高清理论片| 亚洲人成网站999久久久综合| 国产精品91久久| 国产亚洲精品日韩| 在线播放国产一区二区三区| 国产精品私拍pans大尺度在线| 亚洲国产精品va| 自拍亚洲一区欧美另类| 成人精品网站在线观看| 性色av香蕉一区二区| 欧美日韩激情网| 国产精品男女猛烈高潮激情| 亚洲欧美日韩精品| 九九热这里只有精品免费看| 亚洲精品永久免费精品| 欧美成人一区在线| 国产精品6699| 国产精品美女久久久久久免费| 亚洲一区二区三区视频| 亚洲精品久久久一区二区三区| 成人看片人aa| 久久成人在线视频| 91精品国产高清久久久久久91| 久久久国产精品视频| 亚洲欧美中文日韩在线v日本| 国产精品∨欧美精品v日韩精品| 在线精品国产成人综合| 欧美精品第一页在线播放| 欧美日韩成人在线观看| 日韩电影第一页| 国产福利视频一区| 欧美激情视频网站| 亚洲精品影视在线观看| 久久精品99无色码中文字幕| 精品成人乱色一区二区| 国产欧美在线看| 欧美大学生性色视频|