brunonatali / inotify
基于React的PHP inotify实现,用于文件系统变更监控
Requires
- php: >=7
- evenement/evenement: ^3.0
- react/event-loop: ^1.1
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-10 21:34:11 UTC
README
Inotify是一个基于文件系统监控事件的库。该库旨在实现PHP React中的文件变更通知。
目录
开始前
开始之前 - 您必须安装 inotify 扩展 使此库工作。
安装后,您必须将新的扩展配置放置到您的php.ini文件中,如果未声明扩展,系统将自动尝试加载(使用 dl())并如果无法进行则抛出异常。
按照快速入门示例使用try-catch方法构建此类。
快速入门示例
use BrunoNatali\Inotify\Factory; use React\EventLoop\Factory as LoopFactory; $loop = LoopFactory::create(); try { $notify = new Factory($loop); } catch ($e \Exception) { /** * Exception codes: * EXCEPTION_EXTENSION_LOAD -> Extension is not loaded * EXCEPTION_EXTENSION_INIT -> inotify initialization error */ } $filePathName = __FILE__; $notify->add($filePathName, IN_ATTRIB); $notify->on(IN_ATTRIB, function () { echo "File touched"; });
注册/注销
此库由Événement驱动,因此添加()之后,您必须注册一个 事件 来捕获。
按照以下函数和示例进行操作。
add()
要开始监视某些文件,只需调用 add(string $fileName, int $flags)
$notify->add('/some/path/file.name', IN_ATTRIB | IN_MODIFY | IN_ACCESS);
注意。您可以将标志连接起来,如上面的示例。
如果成功添加则返回true
remove()
remove()的方式与add()一样简单
$notify->remove('/some/path/file.name');
如果已删除或不存在则返回true
stopAll()
这将 remove() 所有的监视器。
此函数不需要参数,也不返回任何内容
注意。另外,您可以调用 getAll() 并逐个停止。
事件
要接收任何已注册事件,您必须使用 on(FLAG_NAME, callable) 进行注册
$notify->on(FLAG_NAME, function () { // Do some stuff });
如果您计划在触发任何掩码时得到通知,请使用 "all"(小写)作为 FLAG_NAME。
注册后,当监视器触发事件时,程序将调用您的函数。例如:
$notify->add('/some/path/file.name', IN_ATTRIB | IN_MODIFY | IN_ACCESS); $notify->on(IN_ACCESS, function () { echo "My file was accessed" });
这将触发访问事件,导致您的代码告诉您文件已被访问
cat /some/path/file.name > /dev/null
通用
getAll()
返回一个包含所有注册要监视的文件的数组,结构如下
[ "somepathfile.name" => (int) unique inotify instance wide watch descriptor, "otherpathfile.ext" => (int) another unique inotify instance ]
getLastError()
在大多数情况下,此函数不会抛出异常,但会返回false。为了让您更好地跟踪失败的原因,此库将提供文本错误,只需在失败后立即调用 getLastError() 即可。
支持的标志
上面解释的一些函数需要标志来告诉它们何时触发事件或如何处理触发的事件。
这些标志由开发者作为常量调用,并最初发布在 此处。
如果您想了解其值,请参阅以下列表
IN_ACCESS = 1
IN_MODIFY = 2
IN_ATTRIB = 4
IN_CLOSE_WRITE = 8
IN_CLOSE_NOWRITE = 16
IN_OPEN = 32
IN_MOVED_FROM = 64
IN_MOVED_TO = 128
IN_CREATE = 256
IN_DELETE = 512
IN_DELETE_SELF = 1024
IN_MOVE_SELF = 2048
IN_UNMOUNT = 8192
IN_Q_OVERFLOW = 16384
IN_IGNORED = 32768
IN_CLOSE = 24
IN_MOVE = 192
IN_ALL_EVENTS = 4095
IN_ONLYDIR = 16777216
IN_DONT_FOLLOW = 33554432
IN_MASK_ADD = 536870912
IN_ISDIR = 1073741824
IN_ONESHOT = 4294967295
安装
推荐安装此库的方式是通过 Composer。对 Composer 不熟悉?初学者?
本项目遵循 SemVer。这将安装最新支持版本。
$ composer require brunonatali/inotify:^0.1
本项目旨在在 Linux 上运行,需要 inotify PHP 扩展,但实际上并未在所有环境中进行测试。如果您发现错误,请报告。
许可协议
MIT 许可,请参阅 LICENSE 文件。