gpt4 book ai didi

php如何正确使用inotify实例进行目录监控

转载 作者:可可西里 更新时间:2023-11-01 08:00:02 27 4
gpt4 key购买 nike

好的,我需要一个目录监视器,它可以持续扫描目录以查找添加的新 .txt 文件。打开 .txt 文件,读取/解析内容并将数据写入 mysql 表。我正在研究 inotify,它看起来很强大并且可以完成这项任务,但我不太了解命令序列如何完成我上面提到的任务。

这是一个潜在的例子(告诉我我是否正确地考虑了这个问题):

$fd = inotify_init();
$watch_descriptor = inotify_add_watch($fd, '/some/system/dir/', IN_CREATE);
// Loop forever (never break out of loop since I want to ALWAYS monitor this dir)
while (true) {
$events = inotify_read($fd);
//THIS IS WHERE I DON'T KNOW HOW TO OPEN THE NEWLY CREATED FILE
//PLEASE HELP HERE WITH HOW TO SUCCESSFULLY CREATE THE EVENT ACTIONS
/*
1) OPEN FILE
2) READ/PARSE CONTENTS
3) CREATE MYSQL INSERT STATEMENT
4) DELETE FILE
*/

}

这带来的一个问题是:继续这个循环会永远消耗大量的处理器容量吗?并且:如果是这样,这真的是我应该用来实现目标的方法吗?

任何帮助理解 inotify 和实现我的目标所需的顺序都会非常有帮助。

提前谢谢你。

最佳答案

好吧,这就是我到目前为止所得到的(想法?):

$dir = '/some/system/dir/';
//create mysql database connection here

$fd = inotify_init();
$watch_descriptor = inotify_add_watch($fd, $dir, IN_CREATE);
while (true) {
$events = inotify_read($fd);
$filepath = $dir . $events['name'];
$contents = file_get_contents( $filepath );
//parse contents and insert records into mysql table (thats the easy part)
unlink( $filepath );
}
//close mysql database connection here
inotify_rm_watch($fd, $watch_descriptor);
fclose($fd);

我还注意到,当事件未被触发以释放系统内存和处理器容量时,inotify 将进行进程阻塞(这解决了我对无限 while 循环的担忧)。

关于php如何正确使用inotify实例进行目录监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7924376/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com