header()函數在php的使用很大,下面我來介紹利用它實現頁面緩存的一些方法,但使用header前必須注意,在它以前不能任何輸出,包括空格。javascript
手冊上,咱們對於cache都是寫着如何設置,以便讓代碼不被cache:php
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); // HTTP/1.1 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past header("Pragma: no-cache"); // Date in the past
並且在設置的時候還得注意在header前不能有輸出,不然header設置無效,但都沒有寫過,如何給頁面設置Cache,雖然咱們知道有一些辦法,好比 E-TAG之類的。固然也有簡單的設置:css
好比咱們在輸出前,對內容進行md5,將它當成e-tag只要沒變化,就不會有影響。也有其餘的方式:html
$seconds_to_cache = 3600; $ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT"; header("Expires: $ts"); header("Pragma: cache"); header("Cache-Control: max-age=$seconds_to_cache");
緩存1小時,主要是過時時間得用gmdate來設置,而不是date,這個要注意,其餘都差很少。maxage要和expire可以對得上。java
對於PHP產生的動態內容,只須要在內容輸出以前輸出強制緩存的header便可,好比下面的代碼即要求瀏覽器緩存文件1個月:瀏覽器
<?php header("Cache-Control: public"); header("Pragma: cache"); $offset = 30*60*60*24; // cache 1 month $ExpStr = "Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT"; header($ExpStr); ?>
對於靜態文件,通常的服務器都支持第3級緩存狀態。要想達到第四級的緩存效果,要麼像以前GZIP壓縮那樣,用PHP外包一層,而後用PHP處理。要麼需 要服務器端的支持,APACHE的一個模塊mod_expires支持給文件添加expires header。把下面的代碼加入你的blog目錄下的.htaccess文件,若是你的服務器安裝了mod_expires模塊,則將自動生效,圖片等強 制緩存一個月,html文檔緩存10分鐘。若是該模塊沒有安裝,也不會出錯。緩存
<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/gif A2592000 ExpiresByType image/jpeg A2592000 ExpiresByType image/png A2592000 ExpiresByType application/x-shockwave-flash A2592000 ExpiresByType text/css A2592000 ExpiresByType application/x-javascript A2592000 ExpiresByType text/html A600 </IfModule>
在這裏有mod_expires更詳細的文檔和教程。不過我要說明的是,mod_expires在絕大多數服務器上都沒安裝服務器