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

Dan*_*Dan 14 php caching

我试图确保一些图像在被修改时不被缓存但是哪个更适合这个filectimefilemtime

我真的看不出php手册有多大区别?要么更快?

<img src="/images/123.png?<?=md5(@filectime("/images/123.png"))?>" />
<img src="/images/123.png?<?=md5(@filemtime("/images/123.png"))?>" />
Run Code Online (Sandbox Code Playgroud)

还有这样的函数不会发出e_warning文件错误吗?

理想情况下,我不想只提供问号 <img src="/images/123.png?" />

Jam*_*esG 17

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

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

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

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

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

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

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

<img src="/images/123.png<?= $filemtime ? '?' . $filemtime : ''?>" />
Run Code Online (Sandbox Code Playgroud)

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

  • 禁止警告没有开销,并且在我的本地计算机上对不存在的文件上的一百万(是,1000000)file_exists()的快速基准测试需要1.1秒.所以我使用file_exists()而不用担心它.抑制错误并不是一个好习惯. (2认同)