【问题标题】:Folder monitoring and event triggering according to folder status in phpphp中根据文件夹状态进行文件夹监控和事件触发
【发布时间】:2011-11-15 11:45:03
【问题描述】:

当某个事件发生时,有一个文件夹会在不特定的时间复制 xml 文件。我想要一种 php 方式来检查文件夹的状态,当 xml 文件到达时,将触发一个事件。(例如调用 xml 解析器)。那么哪个是监视文件夹并根据其状态触发事件的最佳方法(在 php 中)?谢谢!

【问题讨论】:

  • 到达是什么意思?
  • 您使用的是哪个操作系统?
  • arrives 表示上传到文件夹(通过 ftp)。我同时使用 linux 和 windows。
  • 上传(例如,第一个,然后是第二个,然后是第三个,然后再写入最后一个字节),就像上传了一个 100 字节的文件一样获得 100 个事件?你真的应该首先在这里思考你到底在做什么。 - 相关: FTP incoming monitor (on upload); How to determine wheter a file is still being transferred via ftp
  • 相关:Run PHP script when a new file is added via FTP - 您可以看到与您的问题类似的问题,这取决于您使用的 FTP 客户端。因此,您应该考虑更多细节以找到问题的答案。使用搜索查找更多相关问题,以获得更好的概览。

标签: php events triggers directory monitor


【解决方案1】:

没试过,不过Inotify或许能帮到你:

inotify 是一个 Linux 内核子系统,用于扩展文件系统以通知文件系统的更改,并将这些更改报告给应用程序。

有一个用于 inotify 的 PHP 扩展,请参阅 InotifyDocsinotifyPECL

如果您在 linux 上运行,另一种选择是使用独立于 PHP 的守护程序来监视目录的更改。您可以使用 dnotify (被 inotify 淘汰),类似于:

dnotify -a -r -b -s /path/ -e <command>;

每次修改其他文件夹中的一个文件时,它将执行该命令(-a -r -b -s = 任何访问/递归目录查找/在后台运行/无输出)。

相关:

【讨论】:

    【解决方案2】:

    我认为最简单的方法是使用 cron 作业每分钟检查一次文件夹。另一种选择是从另一个脚本/程序触发您的 php 脚本,该脚本/程序将新的 xml 文件复制到目录。 Cron 使您能够每分钟运行一次脚本。如果你想要即时响应,你应该编写一个 shell 脚本(http://aplawrence.com/Unixart/watchdir.html),它在后台运行,或者可能是珍珠守护程序来检测新文件并触发你的 php 脚本来检查更改。

    【讨论】:

      【解决方案3】:

      你应该看看FAM (File Alteration Monitor)。基于 PHP 4 的二进制扩展(测试状态); documentation.

      【讨论】:

        【解决方案4】:

        使用 cron 定期scandir() 目录。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-11
          • 2021-04-09
          • 1970-01-01
          • 2011-04-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多