Решение Для Пакетной Обработки Файлов (Php)

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

Это может быть пакетная обработка загруженных изображений, резервное копирование документов, загрузка большого дампа базы данных и так далее.

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



Основная идея очень проста:

Любую операцию над файлами можно разделить на несколько составляющих:
  1. получение списка файлов, необходимых для работы, и организация правильного «расширения» каталогов — без рекурсии (почему так, объясню позже)
  2. Прямая обработка файлов:
    • начать обработку файла (например, открытие дескриптора файла)
    • цикл ( файл еще не обработан ){
    • повторяющийся фрагмент.
    • }
    • завершение обработки файла (например, закрытие дескриптора файла)
Если это операция копирования файла, или дамп, то все этапы будут присутствовать.

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



Для чего все это? Почему это так сложно?

Теперь, когда мы поняли, из каких частей может состоять операция над файлами, приступим к самому главному: что это дает в применении к нашей задаче (показ статуса сложной и длительной операции над файлами)? Это дает следующее:
  1. Сохранение всего дерева файлов, ожидающих обработки (помните, я говорил о нерекурсивных алгоритмах расширения дерева каталогов?)
  2. Теоретическая возможность сохранить состояние операции в любом месте (то есть сразу после запуска или где-то в середине цикла).

  3. Как следствие двух предыдущих, возможность планировать прерывание операции через определенные промежутки времени, чтобы показать пользователю статус операции, и снова начинать с последнего запомненного места.

  4. (Не реализовано) Возможность мониторинга ошибок операции непосредственно во время ее выполнения, без потери состояния и полного отключения.



Что изменится для пользователя?



До:

загрузка… (через полчаса) Таймаут 504 шлюза

После:

начинаю конвертировать… … (обновление статуса каждые 5 секунд) загрузка (123 из 3000 файлов преобразовано)… … операция завершена

Где находится сама библиотека?

Сам текст библиотеки (150 строк с комментариями) и простой пример использования находятся здесь: forum.dklab.ru/viewtopic.phpЭp=146572#146572 Использование в моем файловом менеджере: demo.dolphin-php.org (логин логин, пароль пароль, версия - полная) (копирование, удаление, CHMOD файлов,.

) Более подробное описание в формате .

doc [на английском языке]: m.forum.dklab.ru/files/multipart.rar Теги: #php #обработка данных #Юзабилити #Чулан

Вместе с данным постом часто просматривают: