Обновление индикатора выполнения из PHP-скрипта

Я пишу небольшое приложение, которое делает следующее:

  1. Позволяет пользователю загружать файл Excel
  2. Считывает данные из каждого столбца файла Excel и создает изображение на основе данных.

Прямо сейчас я загружаю файлы и вызываю сценарий, который циклически просматривает файл, создает изображения, создает страницу (или запись в базе данных) с каждым именем картинки, а затем отображает их на экране. Я бы ПРЕДПОЧИТАЛ, чтобы он уведомлял об использовании его прогресса. Я хотел бы, чтобы PHP-скрипт заставлял изображения вызываться через ajax (я знаю, как это сделать), но для того, чтобы он по существу возвращал значение JSON, HTML, простой текст, на самом деле не имеет значения.

Это выполнимо? Я использую JQuery, поэтому, возможно, в его вызовах AJAX есть функция, о которой я не знаю?


person McB    schedule 04.02.2011    source источник
comment
stackoverflow.com/questions/849237/upload-progress-bar -in-php   -  person Ben L.    schedule 04.02.2011


Ответы (5)


Да, это выполнимо. Это не функция jQuery, поскольку она требует интеграции на стороне сервера. Вот примерный набросок того, как это реализовать:

  1. Иметь таблицу базы данных (или другой эквивалентный тип хранилища), в которой хранятся пары ключ-значение. Проще всего, если и ключи, и значения являются строками.
  2. Когда задание запускается, сгенерируйте уникальную строку, которая является ключом и значением 0, которые вы сохраняете в таблице базы данных. Пользователь также перенаправляется на URL-адрес, содержащий эту уникальную строку. Например. "/ mysite / ERxQl3ew".
  3. Используя jQuery, пользовательский клиент должен опросить URL "/ getkeyvalue / ERxQl3ew". Этот URL-адрес должен проверить базу данных и получить статус задания, скажем «45,3», чтобы указать, что задание выполнено на 45,3%. Проще всего, если страница представляет собой строку JSON.
  4. Сервер должен обновлять строку с помощью ключа ERxQl3ew всякий раз, когда изменяется статус или ход выполнения этого задания.
  5. Когда задание завершено, сервер может установить значение строк в «final», чтобы указать, что задание выполнено. Когда клиентский javascript видит это значение, он должен перенаправить пользователя на конечную целевую страницу или иным образом указать пользователю, что задание выполнено.

Может, это звучит сложнее, чем есть на самом деле. Реализовать это довольно просто.

person Björn Lindqvist    schedule 04.02.2011
comment
Спасибо. Вы правы, это просто реализовать таким образом, я думаю, по какой-то причине я просто предположил, что в запросы AJAX будет что-то встроенное, что позволит мне отправлять что-то со страницы, пока оно не будет завершено. Очевидно, что нет, но они обязательно должны добавить такую ​​функцию;) В любом случае, я буду работать с этой идеей. Спасибо за помощь! - person McB; 04.02.2011
comment
APC - это то, что вам следует использовать для отслеживания процесса загрузки большого файла. Он работает аналогично описанному мною методу с уникальным идентификатором, который вы должны опросить. Но для других длительных заданий, помимо загрузки файлов, таких как анализ большого набора данных, вам необходимо самостоятельно реализовать обновление хода выполнения на стороне сервера. - person Björn Lindqvist; 05.02.2011

я так не думаю. Если вы хотите проверить прогресс, вам придется проверять через jquery, я не знаю, каждые 2 секунды. проблема в том, что вам придется запускать php-скрипт асинхронно и сообщать внутренне о прогрессе, который вы бы запросили через javascript. Невозможно, чтобы вы загрузили что-то, и тогда, без каких-либо действий, ваши php-скрипты вам что-то ответят.

person Luke    schedule 04.02.2011

Я рекомендую следующее:

  1. вам нужно сделать какой-то индикатор прогресса, например файл, в котором вы пишете, насколько далеко зашел процесс форматирования
  2. вам также нужен php, который читает этот файл и сообщает, какой процент он прочитал из него
  3. вам нужно периодически вызывать этот php с помощью ajax, пока он не прочитает 100%

Также не забудьте использовать токены для управления одновременным использованием.

person aorcsik    schedule 04.02.2011

jQuery имеет индикатор выполнения, а также есть несколько сценариев PHP, которые возвращают «прогресс», который выводит статус сценария. Вот блог, на который я наткнулся некоторое время назад. Альтернативный метод PHP Cache (APC), а также метод UploadProgress. Оба они являются пакетами PECL. надеюсь это поможет

howto-php-and-jquery- индикатор выполнения загрузки

person KJYe.Name 葉家仁    schedule 04.02.2011

Это выполнимо.

На самом деле есть несколько способов сделать это, но один очень простой - создать таблицу базы данных, которая отслеживает импорт. Когда строка обрабатывается, обновите таблицу базы данных, затем пусть JavaScript вызывает PHP-скрипт каждые несколько секунд через Ajax, и он может возвращать общее количество строк и обработанных строк или процент и т. Д.

Схема может быть такой простой:

Import ID | Total Rows | Processed Rows
---------------------------------------
100       | 12125      | 1246
101       | 6212       | 1302
person White Elephant    schedule 04.02.2011