vox / file-watcher
0.1
2018-05-31 02:41 UTC
Requires
- php: >=7.1
- ext-inotify: *
Requires (Dev)
- phpunit/phpunit: ^7.1
This package is auto-updated.
Last update: 2024-09-13 10:44:24 UTC
README
安装
此库需要PHP 7.1+和pecl inotify扩展inotify
$ sudo pecl install inotify
$ composer require vox/file-watcher
用法
用法简单,首先配置上下文
use Vox\FileWatcher\FolderWatcherContext; use Vox\FileWatcher\FolderWatcher; $context = new FolderWatcherContext(); $context->blocking = true; //if set to false, php will not block when readEvents is called, async code can be done $context->recursive = true; //if set to true subfolders will be also watched, //and so new subfolders will be automatically be watched
然后获取监视器实例
$watcher = new FolderWatcher('/folder/to/watch', $context);
现在,您只需要为每个可能的事件提供回调操作,如下所示
$watcher->onCreated(function (FileWatcherEvent $event, FolderWatcherContext $context) { //do something when a file is created });
还有其他事件需要监听
- onMoved
- onOpened
- onModified
- onClosed
- onDeleted
最后调用dispatchEvent方法以监听文件系统更改
$watcher->dispatchEvents();
请注意,此操作将阻塞直到发生事件,并且一旦在监视文件夹中发生文件系统事件,将立即返回。可以通过将上下文的阻塞属性设置为false来避免此阻塞,这样,如果在监视器实例化和调用此方法之间没有发生事件,将返回一个空数组
readEvents方法
您可能会注意到FolderWatcher类有一个readEvents方法,在这种情况下,您可以调用该方法以获取事件而不分发事件。此方法返回一个Vox\FileWatcher\FileWatcherEvent数组,此类具有各种方法来帮助识别事件的类型
- isDir
- isWatchedDir - 如果此事件指向一个当前正在被监视的目录,则返回true
- isMovedFile
- isMovedFrom
- isMovedTo
- isCreated
- isModified
- isDeleted
- isOpened
- isClosed
- getOriginPath - 如果是移动文件,则作为SplFileInfo实例获取旧路径
- getPath - 文件路径作为SplFileInfo实例
- getCookie - 如果事件具有cookie,则它是移动文件,cookie将绑定移动的文件和移动到事件
注意:并非所有移动到文件的文件都有源路径,只有那些在监视目录之间移动的文件才有,当一个文件来自一个未被监视的目录时,它将没有移动的事件,因此没有originPath