PHP filemtime vs MySQL 最后更新时间戳用于 CMS 中的图像缓存

标签 php mysql filemtime updatedate

我正在尝试确定是将图像的最后修改日期存储在 MySQL 数据库中还是使用 PHP 函数 filemtime 更好。 .

在我的例子中,所有网站信息都存储在数据库 (cms) 中,因此总是有一个查询来提取图像路径等。问题是出于缓存目的,我需要让我的 HTML 输出类似于这个<img src="/img/photo.jpg?v20190613" /> .从我在 php.net 网站上读到的内容来看,这个函数被缓存了。那么在存储最后更新时间戳的数据库表中增加一个字段还是每次都使用这个函数会占用更少的资源?两种方式都有什么优势吗?我正在寻找能够提供最佳性能的任何东西。

最佳答案

我不会使用 filemtime() ,出于一个特定原因:它仅适用于检查运行 PHP 代码的同一主机上的本地文件。

在现代应用程序部署中,将 PHP 代码部署到与提供静态资源的主机不同的主机是很常见的。事实上,通常将 PHP 代码部署到负载均衡器后面的多个应用服务器,这样您就可以进行滚动部署而不会遭受任何停机时间。

您今天可能没有这种架构。您可以将 PHP 代码部署到静态文件和数据库所在的同一主机。但是,随着您的应用程序超出单个主机的规模,或者需要在部署期间不间断运行,您最终将需要扩展到多个主机。最好尽早为此做好计划,并且如果可以避免的话,不要实现阻止您横向扩展的代码。

没有任何 PHP 应用程序服务器可以直接访问保存静态文件的文件系统。如果他们这样做了,您必须执行以下操作之一:

  • 在每个 PHP 应用服务器上存储静态文件的副本,占用更多存储空间。然后担心让它们保持同步,有一些后端脚本来不断检查所有主机是否具有相同的文件集,等等。
  • 使静态文件的文件系统通过 NFS 或类似协议(protocol)远程安装到所有 PHP 应用程序主机。然后 filemtime() 检查会变得稍微慢一些,因为它们正在通过 NFS。您还必须担心 NFS 挂载消失、安全实现、在添加新应用程序主机时配置 NFS 等等。

出于这些原因,我会选择将时间戳放在数据库中,因为无论如何您已经将文件元数据(路径名)存储在那里。

关于PHP filemtime vs MySQL 最后更新时间戳用于 CMS 中的图像缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56588850/

相关文章:

没有 Composer 的 PHPMailer 安装

php - 将值从数据库导入到选择

php - 如何使用 PHP 获取 SQL 表一行中所有整数的总和?

php - 在 PHP 中导出、修改和导入数据库数据的最佳方法

php - 如何在 PHP 中使用 filemtime 函数?

php - 文件修改时间检查的成本

php - Composer 找不到私有(private)托管的包

php - 使用 PHP shell_exec() 导出数据库并压缩它

mysql - 在一个查询中从两个表中选择一条记录并从另一个表中选择多条记录