国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) php教程 用PHP的ob_start();控制您的瀏覽器cache!_PHP教學課程

用PHP的ob_start();控制您的瀏覽器cache!_PHP教學課程

Jul 21, 2016 pm 04:00 PM
cache php start 函數(shù) 可以 控制 瀏覽器 自由

Output?Control?函數(shù)可以讓你自由控制腳本中資料的輸出。它非常有用,特別是對於:當你想在資料已經(jīng)輸出後,再輸出檔案頭的情況。輸出控制函數(shù)不對使用?header()?或?setcookie(),?傳送的檔案頭資訊產生影響,只對那些類似於?echo()?和?PHP?程式碼的資料區(qū)塊有作用。

我們先舉一個簡單的例子,讓大家對Output?Control有大致的印象:
Example?1.

CODEob_start();?//打開緩衝區(qū)
echo?"Hellon";?//輸出
header("location:index.php");?//把瀏覽器重新導向到index.php
ob_end_flush();//輸出全部內容到瀏覽器
?>

所有對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才會輸出,所以並不會有任何文件頭輸出的錯誤!


一、?相關函數(shù)簡介:
1、Flush:刷新緩衝區(qū)的內容,輸出。
函數(shù)格式:flush()
說明:這個函數(shù)常用,效率很高。
2、ob_start?:開啟輸出緩衝區(qū)
函數(shù)格式:void?ob_start(void)
說明:當緩衝區(qū)啟動時,所有來自PHP程式的非檔案頭資訊不會傳送,而是儲存在內部緩衝區(qū)。為了輸出緩衝區(qū)的內容,可以使用ob_end_flush()或flush()輸出緩衝區(qū)的內容。
3?、ob_get_contents?:傳回內部緩衝區(qū)的內容。
使用方法:string?ob_get_contents(void)
說明:這個函數(shù)會傳回目前緩衝區(qū)中的內容,如果輸出緩衝區(qū)沒有激活,則傳回?FALSE?。
4、ob_get_length:傳回內部緩衝區(qū)的長度。
使用方法:int?ob_get_length(void)
說明:這個函數(shù)會回傳目前緩衝區(qū)中的長度;和ob_get_contents一樣,如果輸出緩衝區(qū)沒有啟動。則返回?FALSE。
5、ob_end_flush?:將內部緩衝區(qū)的內容傳送至瀏覽器,並且關閉輸出緩衝區(qū)。
使用方法:void?ob_end_flush(void)
說明:這個函數(shù)會傳送輸出緩衝區(qū)的內容(如果有的話)。
6、ob_end_clean:刪除內部緩衝區(qū)的內容,並且關閉內部緩衝區(qū)
使用方法:void?ob_end_clean(void)
說明:這個函數(shù)不會輸出內部緩衝區(qū)的內容而是刪除它!
7、ob_implicit_flush:開啟或關閉絕對刷新
使用方法:void?ob_implicit_flush?([int?flag])
說明:使用過Perl的人都知道$|=x的意義,這個字串可以開啟/關閉緩衝區(qū),而ob_implicit_flush函數(shù)也和那個一樣,預設為關閉緩衝區(qū),開啟絕對輸出後,每個腳本輸出都直接傳送到瀏覽器,不再需要呼叫?flush()


二、深入了解:

1.?關於Flush函數(shù):
這個函數(shù)在PHP3就出現(xiàn)了,是一個效率很高的函數(shù),他有一個非常有用的功能就是刷新browser的cache .我們舉一個運作效果非常明顯的例子來說明flush.
Example?2.

CODEfor($i?=?1;?$i?//?這一句話非常關鍵,cache的結構使得它的內容只有達到一定的大小才能從瀏覽器裡輸出
//?換言之,如果cache的內容不達到一定的大小,它是不會在程式執(zhí)行完畢前輸出的。經(jīng)
//?過測試,我發(fā)現(xiàn)這個大小的底限是256個字元長。這表示cache以後接收的內容都會
//?源源不絕的被送出去。
For($j?=?1;?$j?echo?$j."
";
flush();?//這一部會使cache中新增的內容被擠出去,顯示到瀏覽器上
sleep(1);?//讓程式"睡"一秒鐘,會讓你把效果看得更清楚
}
?>


具體效果你可以到這裡看看[url]http://www.php2000.com/~uchinaboy/out.php[/url]
PHP2000的最新的PHP聊天室就是用的這個技術,可惜的是原始碼未公開?L
註:如果在程式的首部加入ob_implicit_flush()開啟絕對刷新,就可以在程式中不再使用flush(),這樣做的好處是:提高效率!

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

例如你用得到伺服器和客戶端的設定訊息,但是這個資訊會因為客戶端的不同而不同,如果想要保存phpinfo()函數(shù)的輸出怎麼辦呢?在沒有緩衝區(qū)控制之前,可以說一點辦法也沒有,但是有了緩衝區(qū)的控制,我們可以輕鬆的解決:
CODEob_start();?//打開緩衝區(qū)
phpinfo();?//使用phpinfo函數(shù)
$info=ob_get_contents();?//得到緩衝區(qū)的內容並且賦值給$info
$file=fopen('info.txt','w'); //開啟檔案info.txt
fwrite($file,$info);?//寫入資訊到info.txt
fclose($file);?//關閉檔案info.txt
?>


用以上的方法,就可以把不同用戶的phpinfo資訊保存下來,這在以前恐怕沒有辦法辦到!其實上面就是將一些"過程"轉換為"函數(shù)"的方法!
或許有人會問:"難道就這個樣子嗎?還有沒有其他用途?"當然有了,比如筆者論壇的PHP?語法加亮顯示就和這個有關(PHP預設的語法加亮顯示函數(shù)會直接輸出,不能保存結果,如果在每次呼叫都顯示恐怕會很浪費CPU,筆者的論壇就把語法加亮函數(shù)顯示的結果用控制緩衝區(qū)的方法保留了),大家如果感興趣的話可以來看看[url]http://www.zphp.com/bbs/[/url]!

可能現(xiàn)在大家對ob_start()的功能有了一定的了解,上面的一個例子看似簡單,但實際上已經(jīng)掌握了使用ob_start()的要點。
.使用ob_start開啟browser的cache,這樣可以確保cache的內容在你呼叫flush(),ob_end_flush()(或程式執(zhí)行完畢)之前不會被輸出。
.現(xiàn)在的你應該知道你所擁有的優(yōu)勢:可以在任何輸出內容後面使用header,setcookie以及session,這是ob_start一個很大的特點;也可以使用ob_start的參數(shù),在cache被寫入後,然後自動執(zhí)行指令,例如ob_start("ob_gzhandler");而我們最常用的做法是用ob_get_contents()得到cache中的內容,然後再處理…
.當處理完畢之後,我們可以使用各種方法輸出,flush(),ob_end_flush(),以及等到程式執(zhí)行完畢後的自動輸出。當然,如果你用的是ob_get_contents(),那麼就要你自己控制輸出方式了。

來,讓我們看看能用ob系列函數(shù)做些什麼…

一、?靜態(tài)模版技術

簡介:所謂靜態(tài)模版技術就是透過某種方式,使得使用者在client端得到的是由PHP產生的html頁面。如果這個html頁面不會再更新,那麼當另外的使用者再次瀏覽此頁面時,程式將不會再呼叫PHP以及相關的資料庫,對於某些資訊量比較大的網(wǎng)站,例如sina,163,sohu。類似這種的技術帶來的好處是非常巨大的。

我所知道的實作靜態(tài)輸出的有兩種辦法:
.透過y10k修改的phplib的一個叫做template.inc.php類別實作。
.使用ob系列函數(shù)實作。
對於第一種方法,因為不是這篇文章所要研究的問題,所以不再贅述。
我們現(xiàn)在來看看第二種方法的具體實作:
Example?4.


CODEob_start();//開啟緩衝區(qū)
?>
php頁面的全部輸出

$content?=?ob_get_contents();//取得php頁面輸出的全部內容
$fp?=?fopen("output00001.html",?" w");?//建立一個文件,並打開,準備寫入
fwrite($fp,?$content);?//把php頁面的內容全部寫入output00001.html,然後…
fclose( $fp);
?>

這樣,所謂的靜態(tài)模版就很容易的被實現(xiàn)了…

二、?捕捉輸出

以上的Example?4 .是一種最簡單的情況,你還可以在寫入前對$content進行操作…
你可以設法捕捉一些關鍵字,然後去對它進行再處理,比如Example?3.所述的PHP語法高亮顯示。個人認為,這個功能是此函數(shù)最大的精華所在,它可以解決各種各樣的問題,但需要你有足夠的想像力…
Example?5.

CODE
Function?run_code($code)?{
If($code)?{
ob_start();
eval($code);
$contents?=?ob_get_contents();
ob_endclean();
}else?{
echo?"錯誤!沒有輸出";
exit();
}
return?$contents;
}


以上這個??>以上這個??>

以上這個??>以上這個??>。例子的用途不是很大,不過很典型$code的本身就是一個含有變數(shù)的輸出頁面,而這個例子用eval把$code中的變數(shù)替換,然後對輸出結果再進行輸出捕捉,再一次的進行處理… …

Example?6.?加速傳輸


CODE
/*
**?Title.........:?PHP4?HTTP?the?Web
**?Version.......:?1.20
**?Author........:?catoc?
**?Filename......:?gzdoc.php
**?Last?changed..:?18/10/2000
**?Requirments...:?PHP4?>=?4.0.1
**?PHP was?configured?with?--with-zlib[=DIR]
**?Notes.........:?Dynamic?Content?Acceleration?compresses
**?the?data?transmission?data by?sun?jin?hu?(catoc)?
**?Most?newer?browsers?since?1998/1999?have Asupwbeanan**bmmo. *?standard?known?as?"content-encoding."
**?Essentially?the?browser?indicates?to?the
**?server?that?it?can then
**?compress?the?data?and?transmit?it.?The
**?browser?decompresses?it?and?then?renders
**?the?page。 @natsoft.com.my[/email])
**?based?on?ideas?by?Sandy?McArthur,?Jr
**?Usage........:
**?No?space?before?Usage........:
**?No?space?before?the?the?first?''?tag.
**?------------Start?of?file----------
**?|
* *?|?include('gzdoc.php');
**?|??>
**?|
**?|...?the?page?...
**?| HTML>
**?|
**?|?gzdocout();
**?|??>
**?-------------End?of?file- ----------
*/
ob_start();
ob_implicit_flush(0);
function?CheckCanGzip(){
global?$HTTP_ACC; if?headers_sent()?||?connection_timeout()?||?connection_aborted()){
return?0;
}
if?(strpos($HTTP_ACCEPT_ENCODING,?'x-gzip?gzip";
if?(strpos($HTTP_ACCEPT_ENCODING,'gzip')?!==?false)?return?"gzip";
return?0;
} /*0$level ,?0=none,?9=max?*/
function?GzDocOut($level=1,$debug=0){
$ENCODING?=?CheckCanGzip();
if?($ENCODING) "nn";
$Contents?=?ob_get_contents();
ob_end_clean();
if?($debug){
>?p>Not?compress?length:?".strlen($Contents);
$s?.=?"
Compressed?length:?".strlen(gzcompress($Contents,$level));
$ s;
}
header("Content-Encoding:?$ENCODING");
print?"x1fx8bx08x00x00x00x00x00";
$Size?. Contents);
$Contents?=?gzcompress($Contents,$level);
$Contents?=?substr($Contents,?0,?strlen($Contents)?-?4);
; print?pack('V',$Crc);
print?pack('V',$Size);
exit;
}else{
ob_end_flush();
exit;
}
}
?>

這是catoc的一段很早以前的程式碼,是在weblogs.com看到的,他利用了zlib的函數(shù),對傳輸?shù)膬热葸M行了壓縮,測試表明,對於10k以上的頁面,會產生效果,而且頁面越大,效果越明顯…

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/317035.htmlTechArticleOutputControl函數(shù)可以讓你自由控制腳本中資料的輸出。它非常有用,特別是對於:當你想在資料已經(jīng)輸出後,再輸出檔案頭的情況。輸出控...
本網(wǎng)站聲明
本文內容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
歐易APP官網(wǎng)2025最新版本 歐易交易app安卓 v6.132.0 歐易APP官網(wǎng)2025最新版本 歐易交易app安卓 v6.132.0 Aug 01, 2025 pm 09:12 PM

歐易是一款全球領先的數(shù)字資產交易平臺,為廣大用戶提供安全、穩(wěn)定、可靠的數(shù)字資產交易服務,支持比特幣(BTC)、以太坊(ETH)等多種主流數(shù)字資產的現(xiàn)貨與衍生品交易。其強大的技術團隊和風控體系,致力於為用戶的每一筆交易保駕護航。

以太坊最新k線走勢圖app ETH幣24小時價格動態(tài)實時查詢 以太坊最新k線走勢圖app ETH幣24小時價格動態(tài)實時查詢 Aug 01, 2025 pm 08:48 PM

以太坊(Ethereum)是一個基於區(qū)塊鏈技術的去中心化開源平臺,它允許開發(fā)者構建和部署智能合約和去中心化應用。其原生加密貨幣為以太幣(ETH),是全球市值領先的數(shù)字貨幣之一。

幣安app正版官網(wǎng)鏈接 幣安app安卓版最新地址 v3.0.7 幣安app正版官網(wǎng)鏈接 幣安app安卓版最新地址 v3.0.7 Aug 01, 2025 pm 09:18 PM

幣安(Binance)是全球領先的數(shù)字資產交易平臺,為用戶提供安全、穩(wěn)定、便捷的加密貨幣交易服務。它支持多種數(shù)字貨幣的交易,並提供現(xiàn)貨、合約等功能。

如何下載幣安官方app 幣安交易所app下載鏈接獲取 如何下載幣安官方app 幣安交易所app下載鏈接獲取 Aug 04, 2025 pm 11:21 PM

幣安(Binance)作為國際領先的區(qū)塊鏈數(shù)字資產交易平臺,為用戶提供了安全、便捷的交易體驗。其官方App集成了行情查看、資產管理、幣幣交易及法幣交易等多種核心功能。

以太坊k線走勢實時app ETH幣24小時價格波動在線查看 以太坊k線走勢實時app ETH幣24小時價格波動在線查看 Aug 01, 2025 pm 09:09 PM

以太坊(Ethereum)是一個基於區(qū)塊鏈技術的去中心化開源公共平臺,它允許開發(fā)者構建和部署智能合約及去中心化應用。以太幣(ETH)是以太坊平臺的原生加密貨幣,不僅是平臺上的“燃料”,也是全球市值領先的數(shù)字資產之一,其價格波動備受投資者關注。

Toncoin最新價格走勢app 24小時TON幣k線圖表在線分析 Toncoin最新價格走勢app 24小時TON幣k線圖表在線分析 Aug 01, 2025 pm 09:42 PM

Toncoin(TON)是一個去中心化的第一層區(qū)塊鏈,最初由Telegram團隊構思。它以其高性能、低成本和用戶友好的特點而聞名,旨在為全球數(shù)十億用戶提供一個開放的網(wǎng)絡平臺。其原生代幣TON在網(wǎng)絡中用於支付交易費、質押以及參與網(wǎng)絡治理。

如何檢查用戶的瀏覽器是否已啟用JavaScript? 如何檢查用戶的瀏覽器是否已啟用JavaScript? Aug 03, 2025 pm 12:19 PM

usethetagtodisplayamessageorredectuserserswhenjavascriptisdisabled.2.applygracefuladegradegradationbybuildingcorefunctionalitywithoutjavascriptandenhanciptandenhanciptandenhanciptandenHanciptandenHanciphenavailable.3.adda“ no-js” no-js“ no-js” no-js“

如何下載幣安官方最新版app 幣安app最新版 v3.0.7 如何下載幣安官方最新版app 幣安app最新版 v3.0.7 Aug 01, 2025 pm 09:27 PM

幣安(Binance)是國際知名的數(shù)字資產交易平臺,致力於為全球用戶提供安全、高效的交易體驗。幣安官方App作為其移動端應用,集行情查看、交易執(zhí)行和資產管理於一體,讓用戶可以隨時隨地掌握市場動態(tài)。

See all articles