php header()函式設定頁面Cache快取
阿新 • • 發佈:2019-02-08
轉載地址:https://www.cnblogs.com/phpxuetang/p/5025577.html
header("Cache-Control: public, max-age=604800, s-maxage=43200");
header()函式在php的使用很大,下面我來介紹利用它實現頁面快取的一些方法,但使用header前必須注意,在它之前不能任何輸出,包括空格。
手冊上,我們對於cache都是寫著如何設定,以便讓程式碼不被cache:
123 | 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之類的。當然也有簡單的設定:
比如我們在輸出前,對內容進行md5,將它當成e-tag只要沒變化,就不會有影響。也有其他的方式:
1234 | $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能夠對得上。
對於PHP產生的動態內容,只需要在內容輸出之前輸出強制快取的header即可,比如下面的程式碼即要求瀏覽器快取檔案1個月:
12345678 | <?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分鐘。如果該模組沒有安裝,也不會出錯。
12345678910 | <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在絕大多數伺服器上都沒安裝