2012-03-09 3 views
2

Можно напрямую или напрямую изменять файлы в папках и файлах (по событиям) на PHP или узле, или мне нужно сделать свой собственный метод для этого?Прослушивание папок и файлов (изменения)

Пример: Мне нужно прослушать папку /user. Если я добавлю какой-либо файл в этот каталог, PHP или Node будут получать информацию и, например, запустить PathEvent::fileAdded("/user/user.profile"). Если я переименую папку, она запустит PathEvent::pathRenamed("/user/save1", "/user/save2").

Я знаю, что у PHP нет системы событий, такой как Node. Но для PHP я могу, например, запустить метод (который я не знаю в настоящее время), который имеет изменения, произошедшие с момента последнего проверки.

Ну ... Мне нужен только способ начать поиск, я точно не знаю, в чем смысл этого поиска. Если вы можете показать мне пример, это тоже будет здорово! : P

ответ

2

Node.js предоставляет эту функциональность. Вы можете прочитать бой here.

Простой пример:

var fs = require('fs'); 

fs.watch('somedir', function (event, filename) { 
    console.log(event); 
    console.log(filename); 
}); 

Примечание:

При просмотре каталога, обеспечивая имя файла аргумент в функции обратного вызова не поддерживается на всех платформах (в настоящее время он поддерживается только на Linux и Windows). Даже на поддерживаемых платформах имя файла не всегда гарантируется. Поэтому не предполагайте, что аргумент имени файла всегда предоставляется в обратном вызове и имеет некоторую резервную логику, если она равна нулю.

1

Если у вас есть доступ к тому, как файлы будут доступны/изменены/добавлены и т. Д. Я бы создал пару таблиц в БД. Один для типов изменений и один для изменения и его отметка времени.

Когда кто-то что-то делает с файлом, то есть переименовывает. Он проходит через вашу оболочку, которая также добавляет вставку в db с текущей меткой времени. Когда ваш PHP-скрипт работает, вы можете вытащить все изменения с момента последнего. Таким образом,

select * from Log where ModifiedOn > $lastRun.

Вот как я отслеживаю изменения таблиц DB. Надеюсь, это поможет.

+1

Спасибо. Но он будет работать в цикле, поэтому я могу использовать массив. Но вопрос - это собственный способ сделать это на PHP, без необходимости сканировать все файлы каждый раз при поиске по изменениям. –