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

Heim php教程 php手冊 用PHP控制您的瀏覽器cache

用PHP控制您的瀏覽器cache

Jun 21, 2016 am 09:11 AM
flush quot start

cache|控制|瀏覽器

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

我們先舉一個簡單的例子,讓大家對Output Control有一個大致的印象:
Example 1.
ob_start(); //打開緩沖區(qū)
echo "Hellon"; //輸出
header(“l(fā)ocation:index.php”); //把瀏覽器重定向到index.php
ob_end_flush();//輸出全部內(nèi)容到瀏覽器
?>
所有對header()函數(shù)有了解的人都知道,這個函數(shù)會發(fā)送一段文件頭給瀏覽器,但是如果在使用這個函數(shù)之前已經(jīng)有了任何輸出(包括空輸出,比如空格,回車和換行)就會提示出錯。如果我們?nèi)サ舻谝恍械膐b_start(),再執(zhí)行此程序,我們會發(fā)現(xiàn)得到了一條錯誤提示:“Header had all ready send by”!但是加上ob_start,就不會提示出錯,原因是當打開了緩沖區(qū),echo后面的字符不會輸出到瀏覽器,而是保留在服務器,直到你使用flush或者ob_end_flush才會輸出,所以并不會有任何文件頭輸出的錯誤!


一、 相關函數(shù)簡介:
1、Flush:刷新緩沖區(qū)的內(nèi)容,輸出。
函數(shù)格式:flush()
說明:這個函數(shù)經(jīng)常使用,效率很高。
2、ob_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 。
4、ob_get_length:返回內(nèi)部緩沖區(qū)的長度。
使用方法:int ob_get_length(void)
說明:這個函數(shù)會返回當前緩沖區(qū)中的長度;和ob_get_contents一樣,如果輸出緩沖區(qū)沒有激活。則返回 FALSE。
5、ob_end_flush :發(fā)送內(nèi)部緩沖區(qū)的內(nèi)容到瀏覽器,并且關閉輸出緩沖區(qū)。
使用方法:void ob_end_flush(void)
說明:這個函數(shù)發(fā)送輸出緩沖區(qū)的內(nèi)容(如果有的話)。
6、ob_end_clean:刪除內(nèi)部緩沖區(qū)的內(nèi)容,并且關閉內(nèi)部緩沖區(qū)
使用方法:void ob_end_clean(void)
說明:這個函數(shù)不會輸出內(nèi)部緩沖區(qū)的內(nèi)容而是把它刪除!
7、ob_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ù),他有一個非常有用的功能就是刷新browser的cache.我們舉一個運行效果非常明顯的例子來說明flush.
Example 2.
for($i = 1; $i // 這一句話非常關鍵,cache的結(jié)構(gòu)使得它的內(nèi)容只有達到一定的大小才能從瀏覽器里輸出
// 換言之,如果cache的內(nèi)容不達到一定的大小,它是不會在程序執(zhí)行完畢前輸出的。經(jīng)
// 過測試,我發(fā)現(xiàn)這個大小的底限是256個字符長。這意味著cache以后接收的內(nèi)容都會
// 源源不斷的被發(fā)送出去。
For($j = 1; $j echo $j.”
”;
flush(); //這一部會使cache新增的內(nèi)容被擠出去,顯示到瀏覽器上
sleep(1); //讓程序“睡”一秒鐘,會讓你把效果看得更清楚
}
?>

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

2. 關于ob系列函數(shù):
我想先引用我的好朋友y10k的一個例子:
Example 3.
比如你用得到服務器和客戶端的設置信息,但是這個信息會因為客戶端的不同而不同,如果想要保存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信息保存下來,這在以前恐怕沒有辦法辦到!其實上面就是將一些“過程”轉(zhuǎn)化為“函數(shù)”的方法!
或許有人會問:“難道就這個樣子嗎?還有沒有其他用途?”當然有了,比如筆者論壇的PHP 語法加亮顯示就和這個有關(PHP默認的語法加亮顯示函數(shù)會直接輸出,不能保存結(jié)果,如果在每次調(diào)用都顯示恐怕會很浪費CPU,筆者的論壇就把語法加亮函數(shù)顯示的結(jié)果用控制緩沖區(qū)的方法保留了),大家如果感興趣的話可以來看看http://www.zphp.com/bbs/!

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

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

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

簡介:所謂靜態(tài)模版技術就是通過某種方式,使得用戶在client端得到的是由PHP產(chǎn)生的html頁面。如果這個html頁面不會再被更新,那么當另外的用戶再次瀏覽此頁面時,程序?qū)⒉粫僬{(diào)用PHP以及相關的數(shù)據(jù)庫,對于某些信息量比較大的網(wǎng)站,例如sina,163,sohu。類似這種的技術帶來的好處是非常巨大的。

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

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);
?>
這樣,所謂的靜態(tài)模版就很容易的被實現(xiàn)了……

二、 捕捉輸出

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

Function run_code($code) {
If($code) {
ob_start();
eval($code);
$contents = ob_get_contents();
ob_end_clean();
}else {
echo “錯誤!沒有輸出”;
exit();
}
return $contents;
}

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

Example 6. 加快傳輸


/*
** Title.........: PHP4 HTTP Compression Speeds up 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 on the fly
** code by sun jin hu (catoc)
** Most newer browsers since 1998/1999 have
** been equipped to support the HTTP 1.1
** standard known as "content-encoding."
** Essentially the browser indicates to the
** server that it can accept "content encoding"
** and if the server is capable it will then
** compress the data and transmit it. The
** browser decompresses it and then renders
** the page.
**
** Modified by John Lim (jlim@natsoft.com.my)
** based on ideas by Sandy McArthur, Jr
** Usage........:
** No space before the beginning of the first '' tag.
** ------------Start of file----------
** |
** | include('gzdoc.php');
** |? >
** |
** |... the page ...
** |
** |
** | gzdocout();
** |? >
** -------------End of file-----------
*/
ob_start();
ob_implicit_flush(0);
function CheckCanGzip(){
global $HTTP_ACCEPT_ENCODING;
if (headers_sent() || connection_timeout() || connection_aborted()){
return 0;
}
if (strpos($HTTP_ACCEPT_ENCODING, 'x-gzip') !== false) return "x-gzip";
if (strpos($HTTP_ACCEPT_ENCODING,'gzip') !== false) return "gzip";
return 0;
}
/* $level = compression level 0-9, 0=none, 9=max */
function GzDocOut($level=1,$debug=0){
$ENCODING = CheckCanGzip();
if ($ENCODING){
print "nn";
$Contents = ob_get_contents();
ob_end_clean();
if ($debug){
$s = "

Not compress length: ".strlen($Contents);
$s .= "
Compressed length: ".strlen(gzcompress($Contents,$level));
$Contents .= $s;
}
header("Content-Encoding: $ENCODING");
print "x1fx8bx08x00x00x00x00x00";
$Size = strlen($Contents);
$Crc = crc32($Contents);
$Contents = gzcompress($Contents,$level);
$Contents = substr($Contents, 0, strlen($Contents) - 4);
print $Contents;
print pack('V',$Crc);
print pack('V',$Size);
exit;
}else{
ob_end_flush();
exit;
}
}
?>
這是catoc的一段很早以前的代碼,是在weblogs.com看到的,他利用了zlib的函數(shù),對傳輸?shù)膬?nèi)容進行了壓縮,測試表明,對于10k以上的頁面,會產(chǎn)生效果,而且頁面越大,效果越明顯……



Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
Was soll ich tun, wenn Docker Start nicht gestartet werden kann? Was soll ich tun, wenn Docker Start nicht gestartet werden kann? Oct 21, 2022 pm 03:43 PM

L?sung für Docker-Startfehler: 1. überprüfen Sie den Betriebsstatus und geben Sie dann den belegten Speicher über den Befehl ?echo 3 > /proc/sys/vm/drop_caches“ frei. 2. Verwenden Sie ?$netstat -nltp|grep ..“. "-Befehl, um zu überprüfen, ob der Port belegt ist. Wenn nach dem Online-Gehen festgestellt wird, dass er belegt ist, ?ndern Sie ihn in einen verfügbaren Port und starten Sie neu.

Was tun, wenn der Knotenstart einen Fehler meldet? Was tun, wenn der Knotenstart einen Fehler meldet? Dec 29, 2022 pm 01:55 PM

L?sung für den Knotenstartfehler: 1. Führen Sie ?node xx.js“ direkt im Terminal aus. 2. Fügen Sie das Startup-Element ?scripts“ hinzu: {“test“: ?echo \“Fehler: kein Test angegeben\“ && Exit 1“ ,“start“: ?node service.js“}“; 3. Führen Sie ?npm start“ erneut aus.

php提交表單通過后,彈出的對話框怎樣在當前頁彈出,該如何解決 php提交表單通過后,彈出的對話框怎樣在當前頁彈出,該如何解決 Jun 13, 2016 am 10:23 AM

php提交表單通過后,彈出的對話框怎樣在當前頁彈出php提交表單通過后,彈出的對話框怎樣在當前頁彈出而不是在空白頁彈出?想實現(xiàn)這樣的效果:而不是空白頁彈出:------解決方案--------------------如果你的驗證用PHP在后端,那么就用Ajax;僅供參考:HTML code

Was ist der Unterschied zwischen Start und Ausführung im Java-Thread? Was ist der Unterschied zwischen Start und Ausführung im Java-Thread? Apr 20, 2023 pm 12:37 PM

publicclassTest1extendsThread{@Overridepublicvoidrun(){while(true){System.out.println(Thread.currentThread().getName());}} publicstaticvoidmain(String[]args){Test1test1=newTest1();test1.run() ;//Ausgabeergebnis maintest1.start();//Ausgabeergebnis Thread-0}}1.startstart soll a starten

So starten Sie eine Sitzung mit der Funktion session_start in PHP So starten Sie eine Sitzung mit der Funktion session_start in PHP Jun 26, 2023 pm 01:33 PM

Die Funktion session_start() ist eine der Funktionen, die eine Sitzung in PHP ?ffnet. Sitzung ist eine weit verbreitete Technologie in der Webentwicklung. Die Grundlage der Sitzung besteht darin, dem Benutzer beim Besuch der Website eine eindeutige Sitzungs-ID zuzuweisen und diese Sitzungs-ID zur Identifizierung des Benutzers bei nachfolgenden Besuchen zu verwenden. Sitzungen k?nnen verwendet werden, um den Anmeldestatus des Benutzers, den Inhalt des Warenkorbs und andere Benutzerinformationen zu speichern und k?nnen auch zur Implementierung der Berechtigungskontrolle für einige Funktionen auf der Website verwendet werden. Das ?ffnen einer Sitzung in PHP ist sehr einfach: Verwenden Sie einfach sess

So verwenden Sie die Startmethode und die Ausführungsmethode in einem Java-Thread So verwenden Sie die Startmethode und die Ausführungsmethode in einem Java-Thread Apr 20, 2023 am 08:58 AM

Startmethode und Ausführungsmethode Die Methode $start()$ wird verwendet, um einen Thread zu starten. Zu diesem Zeitpunkt befindet sich der Thread im Bereitschaftszustand (ausführbar) und wird nicht ausgeführt. Sobald die Zeitscheibe $ Die Ausführung der run()$-Methode beginnt. Der direkte Aufruf der Methode $run()$ ruft nur eine Methode in einer Klasse auf, die im Wesentlichen im aktuellen Thread ausgeführt wird. Daher kann dies nur durch Verwendung der Methode $start()$ zum Aufrufen von $run()$ erreicht werden Methode. Echtes Multithreading. Beispielcode@Slf4j(topic="c.Test4")publicclassTest4{publicstaticvoidmain(Strin

So schreiben Sie Regeln programmatisch um So schreiben Sie Regeln programmatisch um Jun 27, 2025 am 12:21 AM

In WordPress müssen Sie beim Hinzufügen eines benutzerdefinierten Artikeltyps oder der ?nderung der festen Verbindungsstruktur die Umschreibungsregeln manuell aktualisiert. Zu diesem Zeitpunkt k?nnen Sie die Funktion fLUSH_REWRITE_RULES () über den Code aufrufen, um ihn zu implementieren. 1. Diese Funktion kann dem Thema oder dem Plug-in-Aktivierungshaken hinzugefügt werden, um automatisch zu aktualisieren. 2. Führen Sie bei Bedarf nur einmal aus, z. B. Hinzufügen von CPT, Taxonomie oder ?nderung der Verbindungsstruktur; 3. Vermeiden Sie h?ufige Anrufe, um die Leistung zu vermeiden. 4. Aktualisieren Sie in einer Umgebung mit mehreren Standorten jede Stelle gegebenenfalls separat. 5. Einige Hosting -Umgebungen k?nnen die Speicherung von Regeln einschr?nken. Klicken Sie auf Speichern auf die Seite "Einstellungen> Pinde Links" auf Speichern auf die Aktualisierung, die für nicht automatische Szenarien geeignet ist.

圖片消失怎么解決 圖片消失怎么解決 Apr 07, 2024 pm 03:02 PM

圖片消失如何解決先是圖片文件上傳$file=$_FILES['userfile']; ?if(is_uploaded_file($file['tmp_name'])){$query=mysql_query("INSERT INTO gdb_banner(image_src ) VALUES ('images/{$file['name'

See all articles