vox/file-watcher

0.1 2018-05-31 02:41 UTC

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