【问题标题】:Listening folders and files (changes)监听文件夹和文件(更改)
【发布时间】:2012-03-26 13:13:05
【问题描述】:

可以直接在 PHP 或 Node 上监听文件夹和文件的更改(通过事件),还是我需要自己的方法来做到这一点?

示例:我需要收听文件夹/user。如果我将一些文件添加到此目录中,PHP 或 Node 会接收信息并运行 PathEvent::fileAdded("/user/user.profile") 例如。如果我重命名一个文件夹,它会运行PathEvent::pathRenamed("/user/save1", "/user/save2")

我知道 PHP 没有像 Node.js 这样的事件系统。但是对于 PHP,例如,我可以运行一个方法(我目前不知道),该方法具有自上次检查以来发生的更改。

嗯...我只需要一种方法来开始搜索,我不知道这个搜索的确切术语是什么。如果你能给我举个例子,那也很棒! :P

【问题讨论】:

    标签: php file node.js directory listen


    【解决方案1】:

    Node.js 提供了这个功能。你可以阅读这个here

    简单示例:

    var fs = require('fs');
    
    fs.watch('somedir', function (event, filename) {
        console.log(event);
        console.log(filename);
    });
    

    注意:

    查看目录时,并非每个平台都支持在回调中提供文件名参数(目前仅在 Linux 和 Windows 上支持)。即使在受支持的平台上,也不总是保证提供文件名。因此,不要假设回调中总是提供文件名参数,如果它为空,则有一些回退逻辑。

    【讨论】:

      【解决方案2】:

      如果您有权访问/更改/添加文件等方式。我会在数据库中创建几个表。一种用于更改类型,另一种用于更改及其时间戳。

      当有人对文件做某事时,即重命名。它通过您的包装器,该包装器还使用当前时间戳向 db 添加插入。 当您的 PHP 脚本运行时,您可以提取自上次以来的所有更改。所以

      select * from Log where ModifiedOn > $lastRun.

      这就是我跟踪数据库表更改的方式。我希望这会有所帮助。

      【讨论】:

      • 谢谢。但它会循环运行,所以我可以使用数组。但问题是在 PHP 上执行此操作的本机方法,无需每次搜索更改时扫描所有文件。
      【解决方案3】:

      对于寻找 PHP 解决方案的任何人,您都可以使用 inotify 扩展。 https://www.php.net/manual/en/book.inotify.php

      请注意,由于 PHP 本身不是事件驱动的,因此仅当您将 PHP 作为守护进程和提供事件循环的库运行时才有意义。观察者可以与 stream_select() 以及您正在监听的任何其他 I/O 一起使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多