无需轮询即可检测 PHP 中的文件更改

Posted

技术标签:

【中文标题】无需轮询即可检测 PHP 中的文件更改【英文标题】:Detect file change in PHP without polling 【发布时间】:2012-12-02 02:29:37 【问题描述】:

我试图检测特定文件何时被修改,而不是轮询文件内容以查找更改。

服务器运行 Mac OS X,所以inotify 不可用。我的服务器允许使用exec()

我怎样才能做到这一点?

【问题讨论】:

作为替代方案,您可以检查filemtime 以获取文件的最后一次修改时间,如果自上次调用以来它发生了变化,您可以假定文件已更改。 您可以在某个时间点对文件进行哈希处理以查看它是否已更改。但是,filemtime 的 CPU 开销要低得多。 php.net 提到 filemtime 的输出会被缓存,如果单个脚本在单个文件上多次使用 filemtime,则应调用 clearstatcache(),但会降低性能。跨度> 每条编程语句都会降低性能。谁在乎? filemtime 似乎以秒为单位返回最后一次文件修改的时间(无论如何,在 OS X 上),这意味着如果文件在同一秒内被修改两次,则第二次修改被错过,这使得不适合经常修改的文件。 【参考方案1】:

检查filemtime()。您可以经常轮询它,这比在文件本身中查找更改要容易得多。

【讨论】:

以上是关于无需轮询即可检测 PHP 中的文件更改的主要内容,如果未能解决你的问题,请参考以下文章

Websocket 或长轮询(使用 AJAX)使用 PHP 检测数据库中的更改

监视/轮询 FTP 位置

从后端异步更新/通知 HTML,无需 AJAX 轮询

Java中的文件更改侦听器

如何在不轮询的情况下监视页面的更改?

Java目录轮询策略