PHP filemtime 与 MySQL CMS 中图像缓存的上次更新时间戳

2024-01-14

我正在尝试确定将图像的上次修改日期存储在 MySQL 数据库中还是使用 PHP 函数是否更好文件时间 https://www.php.net/manual/en/function.filemtime.php.

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


我不会用文件时间() https://www.php.net/manual/en/function.filemtime.php,出于一个特定原因:它仅适用于检查运行 PHP 代码的同一主机上的本地文件。

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

您今天可能没有这种架构。您可以将 PHP 代码部署到静态文件所在的同一主机以及数据库。但是,当您的应用程序无法满足单个主机的需求,或者需要在部署期间不间断运行时,您最终需要扩展到多个主机。最好尽早计划,并且如果可以避免的话,不要实现阻止您扩展的代码。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP filemtime 与 MySQL CMS 中图像缓存的上次更新时间戳 的相关文章

  • file_get_contents 大文件上传

    我正在尝试使用 fsockopen 上传 2GB 以上的大文件 但 file get content 出现以下错误 我无法在内存中存储大文件 我需要分块发送数据 但不知道如何执行此操作 请问有人可以指导我吗 致命错误 允许的内存大小 134
  • MVCC 如何与 MySql 中的 Lock 配合使用?

    我知道Mysql中使用锁或者MVCC可以实现并发控制 比如可重复读 但我不知道MVCC如何避免幻读 在其他地方了解到一般是通过MVCC和Gap Lock来实现的 但是目前我理解的是MVCC不需要锁 即更新和删除都是使用undo log来实现
  • MySQL正则表达式:如何将字符串中的数字与\d匹配?

    我有一个专栏release date它以字符串格式存储日期 不是 DATETIME 格式 因为它们有时可以是任何其他字符串文字 我想根据给定的月份和年份查找任意日期的所有记录 尝试遵循但对我不起作用 gt Post find all con
  • Laravel - 急切加载 Eloquent 模型的方法(而不是关系)

    就像我们可以急切加载 Eloquent 模型的关系一样 有没有办法急切加载不是 Eloquent 模型的关系方法的方法 例如 我有一个 Eloquent 模型GradeReport它有以下方法 public function totalSc
  • Zend Framework 中的动态默认模块

    有谁知道在 Zend Framework 中动态设置默认模块并且不会遇到命名空间问题的方法 例如 我想要做的是有一个允许加载的模块表 其中一个设置为默认模块 例如 我可能有 admin blog calendar 作为可以加载的模块 如果我
  • div 中的文本字符有限,添加“阅读更多”链接并在单击链接时显示所有字符

    我有一个 div 里面有文本 使用 PHP 和 MySQL 显示 结构如下 div class description p Here is a lot of text p div 我想在 p 标签内的文本超过 100 个字符时显示 阅读更多
  • Ajax文件上传

    我想使用 Ajax 和 php 上传文件 我有一个表格
  • Laravel 从 API 响应中删除标头值

    Laravel 应用程序版本 5 6 我希望从 API 响应中显示的 Cache Control 标头中删除 private 值 我有一个中间件添加 无缓存 和 无存储 值 response next request response gt
  • yii2 中的自动完成

    在 Yii2 中 我希望当用户开始输入时 我的输入字段之一能够自动完成 下面是我的代码 它使用Jui Autocomplete 这是行不通的 当我打印我的数组时 我就像 Array 1 gt abc 2 gt xyz 4 gt pqr
  • MySql 视图脚本中的注释

    可以这样做吗 我尝试过多个 gui mysql workbench navicat toad for mysql 但没有一个保存这样的注释 something important select something else importan
  • “修改列”与“更改列”

    我知道 我们不能使用重命名列MODIFY COLUMN语法 但我们可以使用CHANGE COLUMN syntax 我的问题是 主要用途是什么modify syntax 例如 ALATER TABLE tablename CHANGE co
  • PHP-docker容器中的环境变量

    我想在我的 docker 容器中显示一个环境变量 PHP 脚本如下所示 我使用 OpenShift 来启动容器 PHP 容器显示 env is 现在我更改容器的 dc 配置 oc env dc envar USER Pieter deplo
  • 带 url 参数的 Laravel post 路由

    我面临着幼虫路由的大墙 我似乎找不到解决方案 我在视图模板中有此表单
  • Composer 无法获取 github

    今天 我尝试通过运行来安装 Laravelcomposer create project laravel laravel 5 1 myproject prefer dist我收到此错误 Could not fetch https api g
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • Paypal 将钱从一个帐户转移到另一个帐户

    我知道这个建议如何汇款至任何 PayPal 账户 https stackoverflow com questions 1559808 paypal api send money to any paypal account但到目前为止我所尝试
  • 设置大型电子邮件通知系统有哪些方法?

    我的公司有一个用 PHP 构建的网站 我们使用内置的 PHP 电子邮件功能每天向订阅者发送数千封电子邮件 这是一个糟糕的主意 它堵塞了我们的服务器 并且需要几个小时才能完成整个批次 现在我已经研究过像 MailChimp 这样的群发邮件服务
  • Readfile 从大文件中读取 0 字节?

    我正在尝试通过以下方式发送一个大文件readfile 但是 没有任何内容发送到浏览器 并且readfile 回报0 not false 我尝试发送的文件大小为 4GiB 并且可由 PHP 读取 我正在设置set time limit 0 以
  • rake db 问题:迁移 -

    我无法为 Ruby on Rails 设置 MySQL 数据库 设置数据库并确保 config database yml 文件匹配后 我遇到了以下错误消息 U Rails alpha gt rake db migrate trace in
  • 通过 Sparkpost 发送 iCal 邀请

    我正在尝试使用 SparkPost 通过电子邮件以附件形式发送日历邀请 但收到电子邮件后邀请不会打开 我使用两个文件 calendarinvite php 来创建邀请 使用 Sendemail php 来发送电子邮件 calendarinv

随机推荐