Last Updated | | Ratings | | Unique User Downloads | | Download Rankings |
2025-06-03 (-5 hours ago)  | | Not yet rated by the users | | Total: 135 | | All time: 9,293 This week: 488 |
|
Description | | Author |
This package can be used to get notifications of when directory files change.
It can register an object that is subscribed to file and directory change events using the PHP iNotify extension.
The package can also allow applications to consume the change events so they can be notified when files and directories of interest are changed. Innovation Award
 August 2019
Number 9 |
inotify is the name of a PHP extension that is used to notify a PHP application when a given directory or file has its contents changed.
This package provides a wrapper around the inotify package, making it easier for PHP applications to keep track of changes done on any file or directory under operating systems supported by the inotify extension.
Manuel Lemos |
| |
 |
|
Innovation award
 Nominee: 8x |
|
Example
<?php
declare(strict_types=1);
use Inotify\InotifyConsumerFactory;
use Inotify\InotifyEvent;
use Inotify\InotifyEventCodeEnum;
use Inotify\WatchedResourceCollection;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
include __DIR__ . '/../vendor/autoload.php';
(new InotifyConsumerFactory())
->registerSubscriber(
new class implements EventSubscriberInterface {
public static function getSubscribedEvents(): array
{
return [InotifyEvent::class => 'onInotifyEvent'];
}
public function onInotifyEvent(InotifyEvent $event): void
{
echo $event;
}
}
)->consume(
WatchedResourceCollection::createSingle(
sys_get_temp_dir(),
// sys_get_temp_dir() . '/test.log',
//InotifyEventCodeEnum::ON_CREATE()->getValue() | InotifyEventCodeEnum::ON_DELETE()->getValue(),
InotifyEventCodeEnum::ON_ALL_EVENTS()->getValue(),
'test'
)
);
|
Details
php-inotify

Why
In cases when you need to scan dir to find new files or files modifications,
you probably will create some script and implements pulling mechanism.
That is good for small systems with less files but not efficient enough for big one.
And that why we got inotify mechanism that generate event on file|dir changes
like create, delete, change and many more that we can listen to.
More info in php manual. here
Installation
composer require krowinski/php-inotify
Installing inotify extension for php
To listen on event we need php extension called inotify.
In most cases you just need to install using pecl
(example in dockerfile)
Example
You can find example in
example.php
and events that you can listen to InotifyEventCodeEnum.php
Event implement Arrayable, JsonSerializable and __toString.
Array
(
[id] => 1
[eventCode] => 256
[eventDescription] => ON_CREATE - File or directory created in watched directory
[uniqueId] => 0
[fileName] => 2
[pathName] => /tmp
[customName] => test
[pathWithFile] => /tmp/2
[timestamp] => 1565610455
)
Array
(
[id] => 1
[eventCode] => 32
[eventDescription] => ON_OPEN - File was opened
[uniqueId] => 0
[fileName] => 2
[pathName] => /tmp
[customName] => test
[pathWithFile] => /tmp/2
[timestamp] => 1565610455
)
Array
(
[id] => 1
[eventCode] => 4
[eventDescription] => ON_ATTRIB - Metadata changed (e.g. permissions, mtime, etc.)
[uniqueId] => 0
[fileName] => 2
[pathName] => /tmp
[customName] => test
[pathWithFile] => /tmp/2
[timestamp] => 1565610455
)
Array
(
[id] => 1
[eventCode] => 8
[eventDescription] => ON_CLOSE_WRITE - File opened for writing was closed
[uniqueId] => 0
[fileName] => 2
[pathName] => /tmp
[customName] => test
[pathWithFile] => /tmp/2
[timestamp] => 1565610455
)
Array
(
[id] => 1
[eventCode] => 512
[eventDescription] => ON_DELETE - File or directory deleted in watched directory
[uniqueId] => 0
[fileName] => 2
[pathName] => /tmp
[customName] => test
[pathWithFile] => /tmp/2
[timestamp] => 1565610456
)
Where:
[id] => watch descriptor
[eventCode] => bit mask of events
[eventDescription] => human readable event description (can be UNKNOWN if not found in InotifyEventCodeEnum)
[uniqueId] => is a unique id to connect related events (e.g. IN_MOVE_FROM and IN_MOVE_TO)
[fileName] => name of a file (e.g. if a file was modified in a watched directory)
[pathName] => watched resource you give in configuration
[customName] => custom resource name for external parsing like "form-upload-dir" etc
[pathWithFile] => helper that contact pathName and fileName
[timestamp] => ...
|
Applications that use this package |
|
No pages of applications that use this class were specified.
If you know an application of this package, send a message to the author to add a link here.