当前位置:  开发笔记 > 编程语言 > 正文

如何用PHP检查目录内容是否已更改?

如何解决《如何用PHP检查目录内容是否已更改?》经验,为你挑选了4个好方法。

我正在用PHP编写一个照片库脚本,并有一个目录,用户将存储他们的照片.我正在尝试设置页面缓存并仅在目录内容发生更改时才刷新缓存.我想我可以通过使用filemtime()函数缓存目录的最后修改时间来完成此操作,并将其与目录的当前修改时间进行比较.但是,正如我已经意识到的那样,目录修改时间不会随着从该目录添加或删除文件而改变(至少在Windows上,还不确定Linux机器).

所以我的问题是,检查目录内容是否被修改的最简单方法是什么?



1> troelskn..:

正如其他人已经提到的,解决此问题的更好方法是在特定事件发生时触发函数,从而更改文件夹.但是,如果您的服务器是unix,则可以使用它inotifywait来查看目录,然后调用PHP脚本.

这是一个简单的例子:

#!/bin/sh
inotifywait --recursive --monitor --quiet --event modify,create,delete,move --format '%f' /path/to/directory/to/watch |
  while read FILE ; do
    php /path/to/trigger.php $FILE
  done

另见:http://linux.die.net/man/1/inotifywait


在操作系统级别处理一些任务要好得多.例如,设置cronjob本质上是特定于操作系统的.在PHP中没有办法做到这一点.
我按照海报的问题去了.我们可以永远玩'假设'游戏......
我认为解决方案应该保持在PHP级别.此解决方案将PHP应用程序与底层操作系统纠缠在一起并失去了可移植性.
这是关于使用PHP缓存HTML页面,它与PHP有关.让操作系统参与其中会使问题变得复杂.更不用说这个解决方案隐藏的隐藏魔法可能会让程序员感到困惑.

2> 小智..:

用户提交图像后触摸目录怎么样?Changelog说:要求php 5.3 for windows工作,但我认为它应该适用于所有其他环境



3> MSpreij..:

呃.我只是存储目录列表的md5.如果内容更改,md5(目录列表)将更改.您可能会偶尔遇到md5冲突,但我认为这个机会足够小了.
或者,您可以在该目录中存储一个包含"上次修改"日期的小文件.但我会选择md5.


PS.第二个想法,看看你如何看待性能(缓存)请求和散列目录列表可能不是完全最佳的..



4> chic..:

在php内部使用inotifywait

$watchedDir = 'watch';

$in = popen("inotifywait --monitor --quiet --format '%e %f' --event create,moved_to '$watchedDir'", 'r');
if ($in === false)
    throw new Exception ('fail start notify');

while (($line = fgets($in)) !== false) 
{
    list($event, $file) = explode(' ', rtrim($line, PHP_EOL), 2);
    echo "$event $file\n";
}

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有