Ответы пользователя по тегу Алгоритмы
  • Алгоритм чтения большого количества файлов на php

    Возможен ещё вариант:
    1. Из браузера по AJAX фоном посылаем запрос на запуск процесса архивирования (ответа моно и не ждать), в php скрипте на сервере используем "set_time_limit(0)", чтоб скрипт не умер по таймоуту, в скрипте архивируем файлы и периодически в сессию пишем прогресс (сколько упаковано, сколько осталось, что сейчас упаковываем) и считываем из сессии некое значение, которое может сказать нам, что нужно прекратить процесс архивирования.
    2. Периодически из браузера делаем AJAX запрос, на сервере читаем значения прогресса из сессии и высылаем браузеру.
    3. Если нужно будет прервать процесс, то по AJAX посылаем серверу запрос, на сервере в сессии устанавливаем некое значение, которое скажет архивирующему скрипту, что нужно прекратить.

    Удобно тем, что да же если закрыть браузер, то процесс не остановится и при повторной попытке можно узнать, что ещё архивируется и получить статус.
    Ответ написан
    1 комментарий
  • Алгоритм чтения большого количества файлов на php

    1. Из браузера по AJAX запрашиваем список файлов требуемых для упаковки. В это время на сервере его подготавливаем и устанавливаем признак начала процесса (симофор, например: lock файл, который будут обязаны проверять другие скрипты, чтоб не изменять структуру каталогов и файлов, и что бы не запускался процесс архивирования повторно, пока есть работающий процесс).
    2. Если с сервера прийдёт сообщение, что процесс запущен, выводим в браузере сообщение.
    3. Если получили список файлов, то перебираем список и по AJAX поочерёдно отправляем запрос на добавления файла в архив, при этом можно выводить прогресс в браузере (сколько упаковано, сколько осталось, что сейчас упаковываем).
    4. Когда перебрали все файлы, то посылаем AJAX запрос и говорим серверу, что закончили, на сервере снимаем симофор, и посылаем в ответ url на скачивание архива (если необходимо).

    Только может возникнуть проблема, когда страницу в браузере закрыли, тогда симофор не снимется и повторно скрипт не заработает, для решения, можно проверять когда он был установлен и по истечении некого времени игнорировать, либо сделать кнопку принудительного запуска.
    Ответ написан
    Комментировать