Я думаю, достаточно часто в корпоративной админке, или просто административной части какого-либо сайта возникает потребность в обработке большого количества файлов, и показа состояния операции пользователю.
Это может быть пакетная обработка залитых картинок, произведение бэкапа документов, заливка большого дампа БД и так далее. При написании моего файлового менеджера (ждите взрыва популярности в 2010 году ;)) я написал простенькую библиотеку для организации операций с файлами, с показом состояния операции пользователю.
Любую операцию над файлами можно разделить на несколько составляющих:
Если это — операция копирования файла, или выполнение дампа, то все этапы будут присутствовать. Для более простых операций, вроде удаления файлов, ни цикла, ни завершающей стадии может и не быть.
Теперь, когда мы поняли, из каких частей может состоять операция над файлами, приступим к самому главному: что это дает в приложении к нашей задаче (показывать состояние сложной и длительной операции над файлами)?
Это дает следующее:
loading…
(спустя полчаса) 504 gateway timeout
starting convert…
…
(обновление статуса каждые 5 секунд) loading (123 of 3000 files converted)…
…
operation complete
Сам текст библиотеки (150 строчек с комментариями) и простенький пример использования находятся тут:
forum.dklab.ru/viewtopic.php?p=146572#146572
Использование в моем файл-менеджере:
demo.dolphin-php.org (логин login, пароль password, версия — full) (копирование, удаление, CHMOD файлов, ...)
Более подробное описание в формате .doc [English]:
m.forum.dklab.ru/files/multipart.rar
Это может быть пакетная обработка залитых картинок, произведение бэкапа документов, заливка большого дампа БД и так далее. При написании моего файлового менеджера (ждите взрыва популярности в 2010 году ;)) я написал простенькую библиотеку для организации операций с файлами, с показом состояния операции пользователю.
Идея, положенная в основу, очень проста:
Любую операцию над файлами можно разделить на несколько составляющих:
- получение самого списка файлов, которые необходимы для работы, и организация корректного «раскрытия» директорий — без рекурсии (почему так, поясню позже)
- непосредственная обработка файла:
- начало обработки файла (например, открытие дескриптора файла)
- цикл(пока файл не обработан){
- повторяющийся кусок...
- }
- конец обработки файла (например, закрытие дескриптора файла)
Если это — операция копирования файла, или выполнение дампа, то все этапы будут присутствовать. Для более простых операций, вроде удаления файлов, ни цикла, ни завершающей стадии может и не быть.
Для чего это все? Почему так сложно?
Теперь, когда мы поняли, из каких частей может состоять операция над файлами, приступим к самому главному: что это дает в приложении к нашей задаче (показывать состояние сложной и длительной операции над файлами)?
Это дает следующее:
- Сохранение всего дерева файлов, ждущих обработки (помните, я говорил про нерекурсивые алгоритмы раскрытия дерева директорий?)
- Теоретическая возможность сохранять состояние операции в любом ее месте (то есть, сразу после начала, или где-то посередине цикла)
- Как следствие предыдущих двух, возможность планово прерывать операцию через определенные промежутки времени, чтобы показывать состояние операции пользователю, и опять стартовать с последнего запомненного места
- (Не реализовано) Возможность контроля ошибок операции прямо во время ее исполнения, без потери состояния и полного завершения работы
Что изменится для пользователя?
До:
loading…
(спустя полчаса) 504 gateway timeout
После:
starting convert…
…
(обновление статуса каждые 5 секунд) loading (123 of 3000 files converted)…
…
operation complete
Где сама библиотека?
Сам текст библиотеки (150 строчек с комментариями) и простенький пример использования находятся тут:
forum.dklab.ru/viewtopic.php?p=146572#146572
Использование в моем файл-менеджере:
demo.dolphin-php.org (логин login, пароль password, версия — full) (копирование, удаление, CHMOD файлов, ...)
Более подробное описание в формате .doc [English]:
m.forum.dklab.ru/files/multipart.rar