Вопрос

Есть ли способ показать индикатор выполнения в php?Мне нравится сообщать пользователю, что делает php-скрипт.

Вот пример результата с моего веб-сайта http://www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+book

У меня есть статическое загружаемое изображение с некоторым текстом, который говорит "Загрузка ...", когда страница полностью загружена, я скрываю загрузочный div.Мой php-скрипт выходит на amazon api, ebay api и очищает экран от нескольких других сайтов, и вместо статического загружаемого div я хотел бы обновить этот загружаемый div следующим

Загрузка amazon.com

// прогресс amazon, когда закончите загрузку div обновления

Загрузка ebay.com

и т.д.и т.д.

Возможно ли это сделать?если да, то каков наилучший подход?Заранее благодарю за помощь!

Это было полезно?

Решение

Используйте AJAX, чтобы спросить PHP, что он делает в данный момент, и иметь систему очередей, которая определяет, какие задачи выполнены, а какие нет.Вот очень простой пример:

Когда задача будет запущена, заставьте ее установить следующие переменные:

$_SESSION['isEbayLoaded'] = false;
$_SESSION['isAmazonLoaded'] = false;

Как только PHP загрузит eBay, он установит для isEbayLoaded значение true, и тогда AJAX сможет просто спросить PHP, загружен ли уже ebay, затем amazon, а затем все остальное, что вам нужно.Все, что нужно было бы сделать PHP, это проверить, были ли эти переменные установлены как true, что означало бы, что задачи были выполнены.

Другие советы

Я добивался этого раньше с помощью действительно простого решения:

ob_flush();

Все, что для этого требовалось, это создать один div с соответствующими именами классов:

<div class="loading">
    Loading...
</div>

Тогда мой PHP был в основном:

foreach ($sites as $site) {
   printAndFlush(<<<CSS
     <style>
       div.loading {
         background: url($site.png) no-repeat right center;
       }
     </style>
CSS;

   scrapeSite($site);
}

При этом будет использоваться фоновый стиль, чтобы показать, какой сайт вы будете очищать.

Если вам необходимо использовать разметку, вы можете просто каждый раз распечатывать новый "Загружаемый" div (с уникальным идентификатором) вместе со стилем, чтобы установить стиль предыдущего div на "отображать:никаких".

Конечно, помните, что некоторым браузерам требуется не менее 1024 байт (что-то около 4k!) перед отображением чего-либо.

Лучший подход заключается в том, чтобы ваш javascript выполнял ajax-вызовы на сервер и выяснял, где он находится, чтобы вы могли дать некоторую обратную связь пользователю.

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

Я бы сделал запрос для каждого сайта и использовал выходные данные с этой страницы (XML, JSON, что угодно), чтобы сообщить другой странице, что происходит.

Например ... псевдокод:

  • собирать сайты
  • цикл for, который загружает ajax-страницу
  • ajax-страница возвращает каждый запрос с сообщением о состоянии, например- "Загружаю Amazon ...."

Вот и все!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top