2015-01-16 44 views
0

我該如何緩存每隔幾分鐘可能更改一次的映像,以便每小時只生成一次?緩存動態GD映像

有人告訴過我這樣的事嗎?

   header('Content-type: image/png'); 
       header("Cache-Control: private, max-age=10800, pre-check=10800"); 
       header("Pragma: private"); 
       header("Expires: " . date(DATE_RFC822,strtotime(" 1 hour"))); 

但它確實更新每一個變化,我不知道這是不是意味着它沒有緩存或改變覆蓋緩存?

我試圖通過一些其他的主題,但他們沒有解決我的具體問題,或鏈接到死網頁。

+1

這樣的緩存也是以每個客戶端爲基礎的,它不會被緩存給以前從未訪問過該網站的人。我將圖像保存爲一個文件,然後在下次生成時檢查文件mTime並重新生成文件或提供當前文件。一個更大的問題是,客戶端瀏覽器可能會捕獲舊版本的文件,並且在更改後不會看到它,從而得到此文件中的mTime(img src),如path/file.jpg?12345其中12345是時間戳。 – ArtisticPhoenix

+0

這聽起來像一個堅實的計劃。謝謝。我已經意識到一個用戶沒有一個緩存,而這個緩存是這個世代的來源。只是不確定如何確保它不會被渲染。 – WASasquatch

+1

將圖像保存爲文件對緩存圖像來說是完全有效的,這是針對因更改而重新創建的圖像。瀏覽器或客戶端緩存是一個不同的主題。幾乎不可能不緩存它的客戶端,一些瀏覽器將忽略頭。 Wordpress使用在CSS和JS文件中包含版本號的相同想法來防止/刷新客戶端緩存。 – ArtisticPhoenix

回答

1

我強烈推薦SLIR(Smart Lencioni Image Resizer)。它在這裏找到:

https://github.com/lencioni/SLIR

在其他精彩能力(飛/動態調整,自動裁剪等),它緩存所有的渲染圖像的時間長度你在它的配置提供文件。

+0

不幸的是,它不會因爲這種高度自定義和分層的圖像而產生。這與縮略圖無關。 – WASasquatch

+0

我明白了;或者至少沒有建議縮略圖。 默認情況下,無論渲染大小如何,SLIR都會緩存圖像,並監視filemtime以捕獲更改並重新渲染到其緩存中。 –

+0

謝謝。我明白了,但是當談到這個劇本的動態時,它正在重新發明輪子。例如,用戶在網站上處於活動狀態時沒有確定的時間限制,只要提供的信息更新,就會更新。 – WASasquatch