PHP下利用header()函數(shù)設(shè)置瀏覽器緩存的代碼
更新時(shí)間:2010年09月01日 09:44:24 作者:
PHP高級(jí)應(yīng)用學(xué)習(xí)筆記之 利用header()函數(shù)設(shè)置瀏覽器緩存
這涉及到4種頭標(biāo)類型:
Last-Modified(最后修改時(shí)間);
Expires(有效期限);
Pragma(編譯指示);
Cache-Control(緩存控制);
前三個(gè)頭標(biāo)屬于HTTP1.0標(biāo)準(zhǔn)。頭標(biāo)Last-Modified使用UTC日期時(shí)間值。如果緩存系統(tǒng)發(fā)現(xiàn)Last-Modified值比頁面緩存版本的更接
近當(dāng)前時(shí)間,他就知道應(yīng)該使用來自服務(wù)器的新版本。
Expires 表明了緩存版本何時(shí)應(yīng)該過期(格林威治標(biāo)準(zhǔn)時(shí)間)。把它設(shè)置為一個(gè)以前的時(shí)間就會(huì)強(qiáng)制使用服務(wù)器上的頁面。
Pragma生命了頁面數(shù)據(jù)應(yīng)該如何被處理??梢赃@樣避免對(duì)頁面進(jìn)行緩存:
header("Pragma:no-cache");
Cache-Co0ntrol 頭標(biāo)是在HTTP1.1里添加的,能夠?qū)崿F(xiàn)更細(xì)致的控制(還應(yīng)該繼續(xù)使用HTTP1.0頭標(biāo))。Cache-Control的設(shè)置有
很多,如下表:
下面實(shí)例利用header()設(shè)置瀏覽器的緩存:
<?php # Script 2.7 - view_tasks.php
// Connect to the database:
$dbc = @mysqli_connect ('localhost', 'username', 'password', 'test') OR die ('<p>Could not connect to the database!</p></body></html>');
// Get the latest dates as timestamps:
$q = 'SELECT UNIX_TIMESTAMP(MAX(date_added)), UNIX_TIMESTAMP(MAX(date_completed)) FROM tasks';
$r = mysqli_query($dbc, $q);
list($max_a, $max_c) = mysqli_fetch_array($r, MYSQLI_NUM);
// Determine the greater timestamp:
$max = ($max_a > $max_c) ? $max_a : $max_c;
// Create a cache interval in seconds:
$interval = 60 * 60 * 6; // 6 hours
// Send the header:
header ("Last-Modified: " . gmdate ('r', $max));
header ("Expires: " . gmdate ("r", ($max + $interval)));
header ("Cache-Control: max-age=$interval");
?>
1.連接數(shù)據(jù)庫后獲取數(shù)據(jù)表中最新的日期值date_added,date_completed,用UNIX_TIMESTAMP()函數(shù)將返回值轉(zhuǎn)化為整數(shù)然后獲取最大值賦予$max。
2.定義一個(gè)合理緩存時(shí)間。
$interval=60*60*6
合理值屈居于頁面本身、訪問者的數(shù)量和頁面的更新頻率,以上代碼為6個(gè)小時(shí)。
3.發(fā)送Last-Modified頭標(biāo)。
header("Last-Modified:".gmdate("r",($max+$interval)));
gmdate()函數(shù)使用了參數(shù)"r"時(shí),會(huì)根據(jù)HTTP規(guī)范返回相應(yīng)的日期格式。
4.設(shè)置Expires頭標(biāo)。
header ("Expires: " . gmdate ("r", ($max + $interval)));
5.設(shè)置Cache_Control頭標(biāo)。
header ("Cache-Control: max-age=$interval");
Last-Modified(最后修改時(shí)間);
Expires(有效期限);
Pragma(編譯指示);
Cache-Control(緩存控制);
前三個(gè)頭標(biāo)屬于HTTP1.0標(biāo)準(zhǔn)。頭標(biāo)Last-Modified使用UTC日期時(shí)間值。如果緩存系統(tǒng)發(fā)現(xiàn)Last-Modified值比頁面緩存版本的更接
近當(dāng)前時(shí)間,他就知道應(yīng)該使用來自服務(wù)器的新版本。
Expires 表明了緩存版本何時(shí)應(yīng)該過期(格林威治標(biāo)準(zhǔn)時(shí)間)。把它設(shè)置為一個(gè)以前的時(shí)間就會(huì)強(qiáng)制使用服務(wù)器上的頁面。
Pragma生命了頁面數(shù)據(jù)應(yīng)該如何被處理??梢赃@樣避免對(duì)頁面進(jìn)行緩存:
header("Pragma:no-cache");
Cache-Co0ntrol 頭標(biāo)是在HTTP1.1里添加的,能夠?qū)崿F(xiàn)更細(xì)致的控制(還應(yīng)該繼續(xù)使用HTTP1.0頭標(biāo))。Cache-Control的設(shè)置有
很多,如下表:
指令 | 含義 |
public | 可以在任何地方緩存 |
private | 只能被瀏覽器緩存 |
no-cache | 不能在任何地方緩存 |
must-revalidate | 緩存必須檢查更新版本 |
proxy-revalidate | 代理緩存必須檢查更新版本 |
max-age | 內(nèi)容能夠被緩存的時(shí)期,以秒表示 |
s-maxage | 覆蓋共享緩存的max-age設(shè)置 |
復(fù)制代碼 代碼如下:
<?php # Script 2.7 - view_tasks.php
// Connect to the database:
$dbc = @mysqli_connect ('localhost', 'username', 'password', 'test') OR die ('<p>Could not connect to the database!</p></body></html>');
// Get the latest dates as timestamps:
$q = 'SELECT UNIX_TIMESTAMP(MAX(date_added)), UNIX_TIMESTAMP(MAX(date_completed)) FROM tasks';
$r = mysqli_query($dbc, $q);
list($max_a, $max_c) = mysqli_fetch_array($r, MYSQLI_NUM);
// Determine the greater timestamp:
$max = ($max_a > $max_c) ? $max_a : $max_c;
// Create a cache interval in seconds:
$interval = 60 * 60 * 6; // 6 hours
// Send the header:
header ("Last-Modified: " . gmdate ('r', $max));
header ("Expires: " . gmdate ("r", ($max + $interval)));
header ("Cache-Control: max-age=$interval");
?>
1.連接數(shù)據(jù)庫后獲取數(shù)據(jù)表中最新的日期值date_added,date_completed,用UNIX_TIMESTAMP()函數(shù)將返回值轉(zhuǎn)化為整數(shù)然后獲取最大值賦予$max。
2.定義一個(gè)合理緩存時(shí)間。
復(fù)制代碼 代碼如下:
$interval=60*60*6
合理值屈居于頁面本身、訪問者的數(shù)量和頁面的更新頻率,以上代碼為6個(gè)小時(shí)。
3.發(fā)送Last-Modified頭標(biāo)。
復(fù)制代碼 代碼如下:
header("Last-Modified:".gmdate("r",($max+$interval)));
gmdate()函數(shù)使用了參數(shù)"r"時(shí),會(huì)根據(jù)HTTP規(guī)范返回相應(yīng)的日期格式。
4.設(shè)置Expires頭標(biāo)。
復(fù)制代碼 代碼如下:
header ("Expires: " . gmdate ("r", ($max + $interval)));
5.設(shè)置Cache_Control頭標(biāo)。
復(fù)制代碼 代碼如下:
header ("Cache-Control: max-age=$interval");
您可能感興趣的文章:
- PHP獲取用戶的瀏覽器與操作系統(tǒng)信息的代碼
- 使用php判斷瀏覽器的類型和語言的函數(shù)代碼
- php禁止直接從瀏覽器輸入地址訪問.php文件的方法
- 使用PHP curl模擬瀏覽器抓取網(wǎng)站信息
- PHP計(jì)劃任務(wù)之關(guān)閉瀏覽器后仍然繼續(xù)執(zhí)行的函數(shù)
- PHP限制頁面只能在微信自帶瀏覽器訪問的代碼
- PHP實(shí)現(xiàn)提取一個(gè)圖像文件并在瀏覽器上顯示的代碼
- PHP curl模擬瀏覽器采集阿里巴巴的實(shí)現(xiàn)代碼
- php中修改瀏覽器的User-Agent來偽裝你的瀏覽器和操作系統(tǒng)
- php獲取訪問者瀏覽頁面的瀏覽器類型
相關(guān)文章
你應(yīng)該知道的PHP+MySQL分頁那點(diǎn)事
你應(yīng)該知道的PHP+MySQL分頁那點(diǎn)事,這篇文章主要為大家詳細(xì)介紹了PHP+MySQL分頁技術(shù),為大家提供了完整php分頁實(shí)例,感興趣的小伙伴們可以參考一下2016-08-08PHP中4個(gè)加速、緩存擴(kuò)展的區(qū)別和選用建議
這篇文章主要介紹了PHP中eAccelerator、memcached、xcache、APC等4個(gè)加速、緩存擴(kuò)展的區(qū)別和選用建議,需要的朋友可以參考下2014-03-03php生成excel列名超過26列大于Z時(shí)的解決方法
這篇文章主要介紹了php生成excel列名超過26列大于Z時(shí)的解決方法,是針對(duì)采用PHPExcel生成excel列數(shù)過多的情況下的完善技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12php下網(wǎng)站防IP攻擊代碼,超級(jí)實(shí)用
現(xiàn)在做外國網(wǎng)絡(luò),訪問量越來越高了,最近有很多不良IP不停的進(jìn)行攻擊,由于不是自己的主機(jī),所以,只能通過代碼去阻止它們。2010-10-10thinkphp中多表查詢中防止數(shù)據(jù)重復(fù)的sql語句(必看)
下面小編就為大家?guī)硪黄猼hinkphp中多表查詢中防止數(shù)據(jù)重復(fù)的sql語句(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09PHP基于反射機(jī)制實(shí)現(xiàn)插件的可插拔設(shè)計(jì)詳解
這篇文章主要介紹了PHP基于反射機(jī)制實(shí)現(xiàn)插件的可插拔設(shè)計(jì),結(jié)合實(shí)例形式較為詳細(xì)的分析了插件的功能、反射機(jī)制原理與實(shí)現(xiàn)可插拔設(shè)計(jì)的操作步驟,需要的朋友可以參考下2016-11-11PHP數(shù)組游標(biāo)實(shí)現(xiàn)對(duì)數(shù)組的各種操作詳解
這篇文章主要介紹了PHP數(shù)組游標(biāo)實(shí)現(xiàn)對(duì)數(shù)組的各種操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了PHP數(shù)組操作中current與next方法控制數(shù)組游標(biāo)移動(dòng)實(shí)現(xiàn)數(shù)組遍歷的技巧,需要的朋友可以參考下2016-01-01