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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ожидание изменения файла inotifywait

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Maskca
Отправлено: 18 Октября, 2011 - 15:10:47
Post Id


Частый гость


Покинул форум
Сообщений всего: 167
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




Здравствуйте, подскажите как мне правильно использовать функцию inotifywait, чтобы при изменении указанного файла, мне вывело сообщение.
Я пробую как то так:
PHP:
скопировать код в буфер обмена
  1.  
  2. while(true)
  3. system("inotifywait -e modify > my_file.txt > /dev/null 2")
  4.  
  5. echo "alert";
  6.  
  7.  


-----
http://view-tv[dot]ru - Бесплатное телевидение, кино, радио
 
 Top
EuGen Администратор
Отправлено: 18 Октября, 2011 - 15:14:34
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Если Вы используете конструкцию 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. }

Плохо, если размер файла большой


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 18 Октября, 2011 - 15:41:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




EuGen, а почему не md5_file?


-----
PostgreSQL DBA
 
 Top
Maskca
Отправлено: 18 Октября, 2011 - 15:42:46
Post Id


Частый гость


Покинул форум
Сообщений всего: 167
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




Допустим после изменения этого файла вывело сообщение alert, а если файл в течении одной сессии изменился еще раз, то как тогда поступить?

(Отредактировано автором: 18 Октября, 2011 - 15:50:25)



-----
http://view-tv[dot]ru - Бесплатное телевидение, кино, радио
 
 Top
EuGen Администратор
Отправлено: 18 Октября, 2011 - 16:12:16
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Maskca пишет:
в течении одной сессии

Уточните, а еще лучше - опишите всю задачу с самого начала.
Мелкий
Потому что приведен лишь пример. В общем случае это может быть не md5-хеш.(Но если использовать md5 то лучше md5_file, так как имеется выигрыш и по времени и по памяти)
Ну и кроме того, дабы не оправдываться - скажу просто - md5_file я не использовал - не было необходимости в подобных задачах, а функция редкоиспользуемая. Сейчас проверил bench для него - он быстрее примерно в 1.15 раза


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Maskca
Отправлено: 18 Октября, 2011 - 16:30:10
Post Id


Частый гость


Покинул форум
Сообщений всего: 167
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




Допусти есть некий файл file.txt, в нем есть какой то текст, и при изменении файла, то есть когда в файл что то дописали, нужно чтобы этот дописанный текст мгновенно вывелся на страницу.


-----
http://view-tv[dot]ru - Бесплатное телевидение, кино, радио
 
 Top
EuGen Администратор
Отправлено: 18 Октября, 2011 - 16:33:21
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




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

Веб-страницу? Нет, не получится. Сделан запрос - сделан ответ. HTTP - не асинхронный протокол.
Здесь два пути - либо делать запрос через AJAX к серверу через определенные промежутки времени, либо использовать WebSockets (что реализовано только в FF да и там по-умолчанию с 4.0 отключено)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Maskca
Отправлено: 18 Октября, 2011 - 16:37:01
Post Id


Частый гость


Покинул форум
Сообщений всего: 167
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




А через inotifywait никак?


-----
http://view-tv[dot]ru - Бесплатное телевидение, кино, радио
 
 Top
Мелкий Супермодератор
Отправлено: 18 Октября, 2011 - 16:43:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




EuGen, я просто подумал, может с md5_file какая-нибудь тёмная история и md5(file_get_contents()) быстрее, аналогично с file vs explode(PHP_EOL,file_get_contents())

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

ну вот - уже совершенно другая задача.
Уж не чат ли пишете?
(Добавление)
+ вы себе точно представляете, что PHP - язык серверный?


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 18 Октября, 2011 - 16:55:17
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Мелкий
Нет, я тоже могу ошибаться, потому что всего знать/помнить не получится. Поэтому вряд ли стоит думать о некотором скрытом смысле, если я в чем-то неточен/ошибаюсь (один лишь пример с регистронезависисимыми именами функций чего стоит)
Maskca
inotifywait здесь ни при чем, так как исполняется на сервере, который к моменту вывода чего-либо в браузере уже отработал, сделав ответ.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 18 Октября, 2011 - 17:03:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)





EuGen, потому и спросил, в общем-то. Был ли скрытый смысл или нет Подмигивание


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 30 Декабря, 2011 - 12:51:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Пусть и немного поздновато, я почти археолог. Однако.
Чтобы не читать ни файл ни его хеши и не вызывать всякие exec, system и пр..
Используем для достижения тех же целей:
fileatime filemtime и они кешируются, поэтому нужен еще clearstatcache
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB