php 5.5 — отслеживание папки с использованием php и inotify

Мне нужна помощь, чтобы понять, как я могу заставить inotify работать с PHP.
У меня есть основной файл, где я вызываю экземпляр класса inotify, который я создал.

Это работает в течение 30 секунд, а затем php выдает ошибку тайм-аута. В этом временном окне он может фактически печатать информацию из новых и удаленных файлов. Это вроде работает, но …

Мои вопросы к вам, ребята:

  1. Как я могу сделать это постоянным и стабильным. Я имею в виду, что могу задавать запросы на тайм-аут на неограниченное время, но это не очень хорошая практика. Как с этим бороться?
  2. Это должно работать так? Я называю функцию и PHP
    висит в этом цикле, пока не произойдет новое изменение?

Мой index.php

$teste = new Inotify_service();

$teste->add_watch('files');

class Inotify_service
{
private $instance;
private $watch_id;

public function __construct()
{
$this->instance = inotify_init();
stream_set_blocking($this->instance, 0); # this is needed so inotify_read while operate in non blocking mode
}

/**
* [add_watch Adds a new watch or modify an existing watch for the file or directory specified in pathname]
* @param [string] $pathname [description]
*/
public function add_watch($pathname)
{
$this->watch_id = inotify_add_watch($this->instance, $pathname, IN_CREATE | IN_DELETE);

while(true){

// read events
$events = inotify_read($this->instance);

// if the event is happening within our 'Files directory'
if ($events[0]['wd'] === $this->watch_id){
// a file was created
if($events[0]['mask'] === IN_CREATE){
printf("Created file: %s in Files directory\n", $events[0]['name']);
// a file was deleted
} else if ($events[0]['mask'] === IN_DELETE){
printf("Deleted file: %s in Files directory\n", $events[0]['name']);
}
}
}

// stop watching our directories
inotify_rm_watch($this->instance, $this->watch_id);
// close our inotify instance
fclose($this->instance);
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]