Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Ожидание изменения файла inotifywait
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Ожидание изменения файла inotifywait

Страниц (1): [1]
 

1. Maskca - 18 Октября, 2011 - 15:10:47 - перейти к сообщению
Здравствуйте, подскажите как мне правильно использовать функцию inotifywait, чтобы при изменении указанного файла, мне вывело сообщение.
Я пробую как то так:
PHP:
скопировать код в буфер обмена
  1.  
  2. while(true)
  3. system("inotifywait -e modify > my_file.txt > /dev/null 2")
  4.  
  5. echo "alert";
  6.  
  7.  
2. EuGen - 18 Октября, 2011 - 15:14:34 - перейти к сообщению
Если Вы используете конструкцию while(true) ... то не проще ли просто в цикле проверять сам файл? Например, контрольную сумму:
PHP:
скопировать код в буфер обмена
  1. $file='/path/to/file';
  2. $originalHash=md5(file_get_contents($file));
  3. while(true)
  4. {
  5.    $newHash=md5(file_get_contents($file));
  6.    if($originalHash!=$newHash)
  7.    {
  8.       echo('alert');
  9.       //break ??
  10.    }
  11.    sleep(1);
  12. }

Плохо, если размер файла большой
3. Мелкий - 18 Октября, 2011 - 15:41:10 - перейти к сообщению
EuGen, а почему не md5_file?
4. Maskca - 18 Октября, 2011 - 15:42:46 - перейти к сообщению
Допустим после изменения этого файла вывело сообщение alert, а если файл в течении одной сессии изменился еще раз, то как тогда поступить?
5. EuGen - 18 Октября, 2011 - 16:12:16 - перейти к сообщению
Maskca пишет:
в течении одной сессии

Уточните, а еще лучше - опишите всю задачу с самого начала.
Мелкий
Потому что приведен лишь пример. В общем случае это может быть не md5-хеш.(Но если использовать md5 то лучше md5_file, так как имеется выигрыш и по времени и по памяти)
Ну и кроме того, дабы не оправдываться - скажу просто - md5_file я не использовал - не было необходимости в подобных задачах, а функция редкоиспользуемая. Сейчас проверил bench для него - он быстрее примерно в 1.15 раза
6. Maskca - 18 Октября, 2011 - 16:30:10 - перейти к сообщению
Допусти есть некий файл file.txt, в нем есть какой то текст, и при изменении файла, то есть когда в файл что то дописали, нужно чтобы этот дописанный текст мгновенно вывелся на страницу.
7. EuGen - 18 Октября, 2011 - 16:33:21 - перейти к сообщению
Maskca пишет:
мгновенно вывелся на страницу.

Веб-страницу? Нет, не получится. Сделан запрос - сделан ответ. HTTP - не асинхронный протокол.
Здесь два пути - либо делать запрос через AJAX к серверу через определенные промежутки времени, либо использовать WebSockets (что реализовано только в FF да и там по-умолчанию с 4.0 отключено)
8. Maskca - 18 Октября, 2011 - 16:37:01 - перейти к сообщению
А через inotifywait никак?
9. Мелкий - 18 Октября, 2011 - 16:43:55 - перейти к сообщению
EuGen, я просто подумал, может с md5_file какая-нибудь тёмная история и md5(file_get_contents()) быстрее, аналогично с file vs explode(PHP_EOL,file_get_contents())

Maskca пишет:
этот дописанный текст мгновенно вывелся на страницу

ну вот - уже совершенно другая задача.
Уж не чат ли пишете?
(Добавление)
+ вы себе точно представляете, что PHP - язык серверный?
10. EuGen - 18 Октября, 2011 - 16:55:17 - перейти к сообщению
Мелкий
Нет, я тоже могу ошибаться, потому что всего знать/помнить не получится. Поэтому вряд ли стоит думать о некотором скрытом смысле, если я в чем-то неточен/ошибаюсь (один лишь пример с регистронезависисимыми именами функций чего стоит)
Maskca
inotifywait здесь ни при чем, так как исполняется на сервере, который к моменту вывода чего-либо в браузере уже отработал, сделав ответ.
11. Мелкий - 18 Октября, 2011 - 17:03:33 - перейти к сообщению

EuGen, потому и спросил, в общем-то. Был ли скрытый смысл или нет Подмигивание
12. DeepVarvar - 30 Декабря, 2011 - 12:51:44 - перейти к сообщению
Пусть и немного поздновато, я почти археолог. Однако.
Чтобы не читать ни файл ни его хеши и не вызывать всякие exec, system и пр..
Используем для достижения тех же целей:
fileatime filemtime и они кешируются, поэтому нужен еще clearstatcache

 

Powered by ExBB FM 1.0 RC1