Мониторинг прогресса zip на отдельном сервере - PullRequest
5 голосов
/ 02 марта 2012

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

Чтобы запросить этот процесс, пользователь нажимает кнопку на веб-странице, которая затем сообщает моему веб-сайту, чтобы этот другой сервер начал этот процесс. Это означает, что веб-сервер, который обрабатывает запросы, не занимается загрузкой / заархивированием файлов и не истечет время ожидания.

Мне было интересно, как я могу сообщить о ходе архивирования на веб-странице пользователя, чтобы уведомить пользователя о завершении архивирования?

Ответы [ 3 ]

2 голосов
/ 07 марта 2012

Я бы создал файл очереди с тем же именем, что и у "создаваемого zip-файла", но с другим расширением.

На вашем сервере, который создает файл загрузки, позвольте сценарию создать другой файл с тем же именем, но с кодом состояния в качестве расширения. (ex 123456789.PRO означает, что выполняется, и 123456789.DON для того, чтобы быть готовым) Сценарий, который создает zip-файл, может затем обновить это имя файла, прежде чем запуск сделает файл .PRO и завершит .DON)

Теперь на вашем веб-сервере выполните ajax-вызов, который читает скрипт PHP, который в свою очередь проверяет, существует ли файл.

файла нет: процесс не запущен Файл .PRO существует: ОБРАБОТКА Файл .DON существует: Создать ссылку для скачивания

Вызов ajax можно проверять каждые несколько секунд, в зависимости от того, какую нагрузку на сервер вы хотите.

0 голосов
/ 18 апреля 2013

Идея с опросом статуса zip-файла с помощью exec () идеально подходит для проекта, создающего для меня большие zip-файлы.

Я использовал в zip-скрипте выражение вроде:

exec("zip -qdgds 10m output.zip file1.php file2.php > log_dot.txt");

, а теперь еще один скрипт ajax опрашивает и вычисляет (размер файлов в целом и точка * 10MB каждый) фактический процесс создания zip-файла.

Может быть, руководство поможет кому-то еще zip-maual

0 голосов
/ 02 марта 2012

Вы можете настроить опрос через ajax от клиента, чтобы запрашивать прогресс каждые x секунд.

В PHP-скрипте zipping вы можете выводить прогресс в / tmp / файл, например

zip -v filename.zip file1 file2 file3 > /tmp/tmpid.txt

В отвечающем php-скрипте вы можете прочитать выходной файл tmp (например, /tmp/zip_af45d26746a4e5bf01.txt) и рассчитать ход выполнения и вернуться в браузер.

...