2011-09-24 40 views
1

我正在使用具有緩存引擎的timThumb。正如腳本/教程所說,您必須擁有一個具有權限0777的緩存文件。這就是我已經擁有的。我如何知道所顯示的圖像已被緩存?

當圖像被觀看的頁面,使用下面的

timthumb.php?src=http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_z.jpg 

它創建一個9c9313eced007f38eb59791dad91edb1.jpg文件中的高速緩存文件夾。

我檢查了圖像,它與我看到的一樣。在我的下一次刷新中,我查看頁面源並重新獲得

timthumb.php?src=http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_z.jpg而不是緩存的圖像。

我的問題是,不應該顯示一個domain.com/9c9313eced007f38eb59791dad91edb1.jpg

這是我使用http://codepad.org/pVzET9Dv的代碼(這是一個修改版本,以接受所有域)

注:我想它也正式發佈,但一樣了。也許這是緩存的工作原理,我不知道。但如果是這樣,我怎麼才能檢查我所看到的是緩存?

回答

1

您對這裏的緩存概念有錯誤的想法。

請注意,當文件位於cache_dir時,php會檢查用戶是否向他發送了標頭HTTP_IF_MODIFIED_SINCE

如果瀏覽器發送了這個頭文件,那麼這意味着瀏覽器已經有一個Last-Modified值爲HTTP_IF_MODIFIED_SINCE的文件的本地副本。

現在,如果此日期實際上是圖像的最後修改日期,那麼服務器會發送標頭HTTP/1.1 304 Not Modified

注意檢入功能show_cache_file


還有一件事,似乎PHP正在重新調整圖像大小並將重新調整大小的圖像保存在自己的緩存文件夾中。所以這樣,重新調整過程不再重複。


我不知道是否有瀏覽器允許您知道顯示的圖像是從緩存中獲取還是下載。無論如何,這是不相關的,因爲用戶必須確定它是最近的圖像。

+0

謝謝你的回答。高速緩存加速頁面加載嗎?因爲我看不到任何與緩存打開或關閉的區別。 – EnexoOnoma

+0

當然是「服務器負載較少,因爲它不會發送所有圖像」「更快的客戶端加載時間,因爲它不會下載所有圖像」 –

+0

是否有任何可能的方式知道它是否緩存或下載?使用腳本或其他... – EnexoOnoma

0

網址timthumb.php?src=http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_z.jpg 不會改變。腳本的邏輯是這樣的:


我一直在考慮一個URL爲圖像「http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_z.jpg」

我是否在磁盤上有一個未過期的緩存副本?

否:請從「http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_z.jpg」中取回圖像,將其寫入緩存,然後顯示它。

YES:從磁盤讀取文件並顯示它。


所以,即使你是說像這裏(通過查詢字符串參數SRC =)「http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_z.jpg」這並不意味着該腳本實際上每次從那裏檢索它。

我想說的是,您的權限是正確的,並且緩存文件正在寫入該文件夾,這是驗證足夠的工作。

除此之外的任何驗證都會浪費時間。

+0

該腳本如何知道保存在像「9c9313eced007f38eb59791dad91edb1.jpg」這樣的緩存文件夾中的圖像是否顯示在正確的位置?我不是說腳本不能工作,而是知識問題。 – EnexoOnoma

+0

9c9313eced007f38eb59791dad91edb1是在查詢字符串中傳遞的src參數的md5總和。它是根據你給它的url來計算的 - 所以如果你給它兩次相同的url,這個計算是兩次相同的。這就像存儲散列密碼的工作方式一樣。 – codercake

相關問題