2015-06-11 2 views
-2

Я запускаю Zend-сервер и ZF1 с базой данных db2. Для некоторого экспорта запросы занимают очень много времени (> 50 секунд), что приводит к ошибке таймаута 408. Я ищу решение для отображения загрузочного сообщения на клиенте во время выполнения SQL-запроса. Любая помощь приветствуется.Загрузка сообщения вместо таймаута при выполнении тяжелого запроса

ответ

1

Необходимо увеличить максимальное время выполнения, разрешенное для php, чтобы оно могло завершиться и не было завершено кодом возврата 408. Либо локально для этого сценария только: http://php.net/manual/en/function.set-time-limit.php или глобально: http://php.net/manual/en/info.configuration.php#ini.max-execution-time

Самый простой способ показать прогресс загрузки должен иметь длинную работу выполненную с просьбой AJAX. На главной странице должен отображаться ход загрузки и запуск запроса на скрипт экспорта с помощью Javascript. Когда этот сценарий экспорта заканчивается, на главной странице может отображаться сообщение об успешном завершении.

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

Другой способ сделать это - создать очередь заданий. Это можно сделать, используя систему очередей или просто используя таблицу заданий в базе данных. Когда пользователь запрашивает экспорт, вы создаете новое задание. Вам нужен процесс, который выполняется на сервере, например, в качестве задания cron, который проверяет таблицу для всех новых заданий, а когда есть один, он запускает экспорт и обновляет статус задания. На своей странице вам нужно периодически, с помощью Javascript или просто перезагружать страницу, проверять статус своей работы и показывать успешное сообщение, когда оно будет завершено. Опять же, если экспорт создает файл, серверный процесс должен записать его, и вы включаете ссылку для загрузки в сообщении об успешном завершении.

+0

Спасибо, я попробую это решение – Ayoub

Смежные вопросы