可以直接在PHP或Node上监听文件夹和文件的更改(通过事件),或者我需要自己创建方法来执行此操作?
示例:我需要收听文件夹/user
。如果我将一些文件添加到此目录中,PHP或节点将接收信息并运行PathEvent::fileAdded("/user/user.profile")
。如果我重命名文件夹,则会运行PathEvent::pathRenamed("/user/save1", "/user/save2")
。
我知道PHP没有像Node这样的事件系统。但是对于PHP,我可以运行一个方法(我目前不知道),自上次检查后发生了变化。
嗯......我只需要一种方法来开始搜索,我不知道这个搜索的确切含义是什么。如果你能告诉我一个例子,它也会很棒! :P
答案 0 :(得分:1)
如果您可以访问文件的访问/更改/添加等方式,我会在DB中创建几个表。一个用于更改类型,一个用于更改及其时间戳。
当某人对文件执行某些操作(即重命名)时。它通过您的包装器进行,该包装器还使用当前时间戳向db添加插入。 当您的PHP脚本运行时,您可以提取自上次以来的所有更改。所以
select * from Log where ModifiedOn > $lastRun
。
这就是我跟踪数据库表更改的方式。我希望有所帮助。
答案 1 :(得分:1)
Node.js提供此功能。你可以阅读这个here。
简单示例:
var fs = require('fs');
fs.watch('somedir', function (event, filename) {
console.log(event);
console.log(filename);
});
注意:
当观看目录时,在每个平台上都不支持在回调中提供filename参数(目前它仅在Linux和Windows上受支持)。即使在支持的平台上,也不总是保证提供文件名。因此,不要假设在回调中始终提供filename参数,并且如果它为null则具有一些回退逻辑。
答案 2 :(得分:0)
对于正在寻找PHP解决方案的任何人,您都可以使用inotify扩展名。 https://www.php.net/manual/en/book.inotify.php
请注意,由于PHP本身不是事件驱动的,因此仅当您将PHP作为守护进程和提供事件循环的库运行时,使用此选项才有意义。监视程序可以与stream_select()
以及您正在侦听的任何其他I / O一起使用。