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 :: Версия для печати :: Выполнение действия в случае изменения файла
Форумы портала PHP.SU » » Вопросы новичков » Выполнение действия в случае изменения файла

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

1. Jetro - 26 Декабря, 2013 - 05:25:09 - перейти к сообщению
Вот так, даже не смог сформулировать внятного названия темы.

Имеется отображаемый PHP файл "index.php", в который инклудом подключается PHP файл "load.php", который в свою очередь с помощью "simplexml_load_file" подгружает "data.xml" с данными. В XML-файл периодически добавляются данные.
Хочется сделать так, чтобы при просмотре "index.php", файл "load.php" обновлялся в случае изменения "data.xml".
Сделать периодическое обновление "load.php" по времени дело нехитрое - в инете куча примеров на jQuery. Но это ведь некошерно, это сейчас там пару байт, но позже файл то разростется. Зачем издеваться над сервером? По этому задумал сделать обновление страницы только в случае изменения XML-файла, но вот с чего начать - не представляю.
Думаю вполне достаточно будет хотя-бы толчка в нужном направлении.
2. kotyara1979 - 26 Декабря, 2013 - 05:55:00 - перейти к сообщению
Цитата:
Сделать периодическое обновление "load.php" по времени дело нехитрое - в инете куча примеров на jQuery. Но это ведь некошерно, это сейчас там пару байт, но позже файл то разростется.


А кто мешает сначала проверить изменился файл с данными или нет, и только если изменился делать обновление нужной части страницы?
3. likvidator - 26 Декабря, 2013 - 13:42:30 - перейти к сообщению
Первое,что пришло в голову - при первой загрузке читаем файлик и запоминаем номер последней строки,дальше тямем все,что после,если вытянули чего - запомнили и по кругу
4. caballero - 26 Декабря, 2013 - 13:59:49 - перейти к сообщению
simplexml парсит быстро - не стоит заморачивтся
а если данных станет много то все равно их нет смысла выводить пользователю в полном обеме.
5. Zuldek - 26 Декабря, 2013 - 14:08:05 - перейти к сообщению
Создайте кеш с объектом/массивом распарсенного файла в который также запишите размер исходного файла.
При необходимости выгрузить данные в приложении проверьте свойства текущего файла. Если размер файла больше сохранённого значения на нужную величину, то парсите и перезаписывайте кэш, если нет, то отдавайте массив из текущего кеша.
Если есть строгая необходимость производить сам факт выгрузки файла лишь после его непосредственного изменения и нет возможности пинать лоудер вместе с выгрузкой изменённого xml-файла, то создайте слушатель свойств xml-файла.
Оптимальный способ реализации слушателя может варьироваться в зависимости от среды работы приложения. Можно использовать как встроенные в ОС сервера, так независимые библиотеки. Например libev. Количественные измерения задачи отсутствуют потому сложно посоветовать оптимальный вариант решения.
6. Jetro - 26 Декабря, 2013 - 17:15:46 - перейти к сообщению
kotyara1979 пишет:
А кто мешает сначала проверить изменился файл с данными или нет, и только если изменился делать обновление нужной части страницы?

До этого я и сам додумался. А вот как проверку реализовать? Вот в чем вопрос был.

likvidator пишет:
Первое,что пришло в голову - при первой загрузке читаем файлик и запоминаем номер последней строки,дальше тямем все,что после,если вытянули чего - запомнили и по кругу

Обычно проверяют или дату изменения файла, или размер, но чтобы проверять количество строк... думаю мороки много будет.

caballero пишет:
simplexml парсит быстро - не стоит заморачивтся
а если данных станет много то все равно их нет смысла выводить пользователю в полном обеме.

Хм, возможно и так. В любом случае, если данных станет слишком много, то их придется переносить в какую-то базу данных. Но в данный момент это делать нецелесообразно.
Если не найду простого решения обновления файла при изменении, то сделаю обновление по времени.

Zuldek, знания PHP не на том уровне, чтобы создавать кеш с данными. Тем более хочется очень простого и красивого решения. Думаю такой вариант мне не подойдет.
Никаких строгих необходимостей нет, хочется всего лишь отображать актуальные данные на открытой странице без нужды её постоянно обновлять.
Самое простое решение это регулярное обновление инклуда по таймеру. Это пройдет если частота обновления данных будет очень большой (несколько раз в минуту). А если обновленные данные будут появляться с частотой один-два раза в день, то смысла обновлять страницу каждых несколько секунд попросту нет.
А каким образом можно узнать размер файла? В гугле куча обсуждений проверки размера файла на диске пользователя, но о проверке размера на сервере не удалось найти ни слова. Думаю можно размер файла хранить не в массиве данных, а, например в отдельном файле, перезаписываемым страницей.
7. kotyara1979 - 26 Декабря, 2013 - 18:34:47 - перейти к сообщению
8. bestbios - 28 Декабря, 2013 - 14:33:18 - перейти к сообщению
md5 check sum имхо

 

Powered by ExBB FM 1.0 RC1