filectime vs filemtime用于文件修改时间?

时间:2014-02-26 13:17:22

标签: php caching

我正在尝试确保某些图片在修改后不会被缓存但哪个更适合此filectimefilemtime

我真的看不出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?" />

3 个答案:

答案 0 :(得分:17)

当你处理图像缓存时,filectime是不合适的 - 它标志着最后一次

  

来自inode的权限,所有者,组或其他元数据   已更新

您想知道图片文件内容是否已更改 - 是否已完全调整大小,裁剪或替换。

因此filemtime更适合您的应用程序:

  

当正在写入文件的数据块时,即   文件内容更改的时间

如果你不想要?要始终显示,首先将filemtime设置为变量并测试它:

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

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

更好的是,在运行filemtime之前使用file_exists()测试文件是否存在

答案 1 :(得分:1)

  

注意:在大多数Unix文件系统中,文件被视为已更改   当它的inode数据改变时;也就是说,当权限,所有者,   组或来自inode的其他元数据已更新。也可以看看   filemtime()(这是您想要创建时要使用的内容   网页上的“上次修改”页脚)和fileatime()。

来自manual

所以你想使用filemtime

答案 2 :(得分:0)

filemtime::表示何时更改或修改数据或内容,不包括所有权或所有者组之类的元数据。

filectime::表示文件的元数据或索引节点数据发生更改的时间,例如权限,所有权或组的更改。

所以filemtime是解决方案。