我不会使用filemtime(),原因有一个:它仅适用于检查运行 PHP 代码的同一主机上的本地文件。
在现代应用程序部署中,将 PHP 代码部署到与提供静态资源的主机不同的主机是很常见的。事实上,将 PHP 代码部署到负载均衡器后面的多个应用程序服务器是很常见的,因此您可以进行滚动部署而不会遭受任何停机时间。
您今天可能没有这种架构。您可以将 PHP 代码部署到静态文件所在的同一主机以及数据库。但是,随着您的应用程序超出单个主机,或者需要在部署期间不间断运行,您最终需要横向扩展至多个主机。最好尽早计划好,如果可以避免的话,不要实现阻止您向外扩展的代码。
没有一个 PHP 应用程序服务器可以直接访问保存静态文件的文件系统。如果他们这样做了,您必须执行以下操作之一:
- 在每个 PHP 应用服务器上存储静态文件的副本,使用更多的存储空间。然后担心使它们保持同步,有一些后端脚本来不断检查所有主机是否具有相同的文件集,等等。
- 通过 NFS 或类似协议将静态文件的文件系统远程安装到所有 PHP 应用程序主机。然后
filemtime()
检查会变得有点慢,因为它们要通过 NFS。而且您必须担心 NFS 挂载、安全实施、添加新应用程序主机时配置 NFS 等等。
由于这些原因,我选择将时间戳放在数据库中,因为无论如何您已经将文件元数据(路径名)存储在那里。