2014-02-26 42 views
10

我試圖確保一些圖像在被修改時不會被緩存,但哪些會更適合這個filectimefilemtimefilectime vs filemtime文件修改時間?

我真的看不到從php手冊有太大的區別?要麼會更快?

<img src="/images/123.png?<?=md5(@filectime("/images/123.png"))?>" /> 
<img src="/images/123.png?<?=md5(@filemtime("/images/123.png"))?>" /> 

也有這樣的功能,不上文件錯誤發出e_warning

理想我不想永遠有用的問號<img src="/images/123.png?" />

回答

13

當你正在處理的圖像緩存,filectime是innappropriate - 它標誌着最後一次

時的權限,所有者,組,或從inode 其他元數據被更新

你想知道圖像文件內容是否已經改變 - 如果它已被調整大小,裁剪或完全更換。

因此filemtime更適合你的應用:

當一個文件的數據塊被寫入到,也就是,當文件的內容被改變的 時間

如果你不想要?總是出現,filemtime設置爲變量第一和測試它:

$filemtime = @filemtime("/images/123.png"); 

<img src="/images/123.png<?= $filemtime ? '?' . $filemtime : ''?>" /> 

更妙的是,測試文件的存在與運行filemtime

+0

前file_exists()我想過使用'file_exists'但是對一個任務做兩個系統查找似乎有點沒有意義?在系統上抑制e_warning或使用file_exists會有更大的壓力嗎? – Dan

+2

禁止警告沒有任何開銷,一個不存在的文件上百萬(是,1000000)file_exists()的快速基準在本地機器上需要1.1秒。所以我會使用file_exists()而不用擔心它。抑制錯誤不是一個好習慣。 – JamesG

1

注:在大多數Unix文件系統,文件被認爲是改 當它的inode數據被改變;也就是說,何時更新了inode的權限,所有者, 組或其他元數據。另請參閱 filemtime()(這是您想要在網頁上創建 「上次修改」頁腳時要使用的內容)和fileatime()。

manual

所以要使用filemtime