2010-05-03 80 views
0

僅當文件自上次訪問後發生更改時纔會提供新內容。如何在PHP中實現這個緩存控制策略?

我該如何實施?

UPDATE

遺憾沒能更早提及,但所請求的資源是直接要求,而不是一個圖像的網頁。

+0

它是一個靜態的'.html'頁面還是'.php'頁面?瀏覽器不會緩存動態頁面('.php','.asp'等) – Andy 2010-05-03 16:52:00

+0

它是'.php',我們可以改變這種行爲嗎? – user198729 2010-05-03 16:54:20

+0

我不這麼認爲,你必須把你的腳本的輸出寫到一個'.html'文件並代替它。 – Andy 2010-05-03 16:57:22

回答

2

您可以使用從軌道借用一招,最後文件的修改時間追加到包括:

$fileName = 'image.jpg'; 
$httpLink = $fileName . '?' . filemtime($fileName); 
echo '<img src="', $fileName, '" alt="blah" />'; 

這將輸出像

<img src="image.jpg?1002412" alt="blah" /> 

然後,當文件發生變化時,一個鏈接查詢字符串也將更改,瀏覽器將請求「新」文件即

<img src="image.jpg?1003622" alt="blah" /> 

或者,您可以保留文件修訂版的本地日誌,並從數據庫中讀取版本號,而不是文件系統,這可能稍微快一些(並且保存文件系統讀取,儘管它沒有顯着差異 - 取決於數據庫與Web服務器負載)。

+0

嘿,多漂亮的主意! 'filemtime'在性能上也相當簡單。太好了! – 2010-05-03 16:43:21

+0

現在,這是一個很棒的技巧,不知道那個:O – lamas 2010-05-03 16:43:22

+0

如果你使用PATH_INFO,這將工作**更好**(如果URL不以擴展名結束,瀏覽器可能會挑剔)。 – 2010-05-03 16:45:23