Я хочу сделать индикатор выполнения для моей операции PHP, которая занимает много времени, чтобы завершить - PullRequest
1 голос
/ 18 декабря 2010

Всякий раз, когда я пытаюсь запустить длинную операцию с php, она не позволяет странице загружать другие данные до завершения операции.(Я знаю, что php - это выполнение на сервере, это также происходит).

Но как я могу использовать индикатор выполнения для решения этой проблемы, чтобы страница загрузилась, а затем отобразила ход выполнения вызова javascript для запуска phpстраница для компиляции и показ ее результата на передней панели

Я здесь выполняю процесс преобразования видео, поэтому он уверен, что время зависит от размера файла, который он конвертирует, и поэтому мне действительно нужно показать индикатор выполнения на странице, гдеэто перейти к.

Ответы [ 2 ]

1 голос
/ 18 декабря 2010

Существует несколько способов решения этой проблемы.

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

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

Во-первых, вы можете использовать старый добрый HTTP и HTML в синхронном процессе.Вы можете позвонить flush , чтобы записать все свои выходные данные клиенту.Вы можете настроить страницу HTML, вызвать flush, чтобы написать ее клиенту, а затем периодически добавлять новые элементы HTML (или вызовы функций JavaScript), которые вы сбрасываете на клиент.Другими словами, добавьте что-то вроде:

<div class="progressbar" width="77px"></div>

Индикатор выполнения класса CSS установит координаты элемента и установит цвет фона, а ширина (постоянно увеличивающаяся) заставит это покрывать большепространство с течением времени.

Путь JavaScript, вероятно, несколько проще:

<script>
updateProgress(77);
</script>

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

Лучший способ сделать это - асинхронно.Вместо того, чтобы работа выполнялась в процессе PHP, который идет с запросом PHP, используйте сервер заданий (я рекомендую Gearman ) или очередь ( Amazon SQS или RabbitMQ *)1024 * являются хорошими вариантами) чтобы эта работа была выполнена в другом процессе.Этот процесс может отправлять информацию о ходе выполнения на сервер заданий или в базу данных.

Интерфейс будет использовать либо обновленную HTML-страницу, либо что-то с AJAX, чтобы каким-либо способом запросить завершенность заданияидентификатора.Серверная часть, которая получает запрос, проверит сервер заданий или базу данных с этим идентификатором, чтобы определить, насколько далеко он находится.

0 голосов
/ 18 декабря 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...