PHP прогресс бар? - PullRequest
       8

PHP прогресс бар?

2 голосов
/ 22 октября 2009

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

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

У меня есть статическое изображение загрузки с текстом, который говорит: «Загрузка ...», когда страница полностью загружена, я скрываю div загрузки. Мой php-скрипт распространяется на API-интерфейсы Amazon, API-интерфейсы Ebay и скриншоты нескольких других сайтов, и вместо статического div загрузки я хотел бы обновить этот div загрузки следующим

Загрузка amazon.com

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

Загрузка ebay.com

и т.д.. и т.д.

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

Ответы [ 4 ]

3 голосов
/ 22 октября 2009

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

Когда задание запущено, задайте для него следующие переменные:

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

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

1 голос
/ 22 октября 2009

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

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 в «display: none».

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

0 голосов
/ 22 октября 2009

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

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

  • сбор сайтов
  • для цикла, загружающего страницу ajax
  • Страница ajax возвращает каждый запрос с сообщением о состоянии, например, - «Загрузка Амазонки ....»

Вот и все!

0 голосов
/ 22 октября 2009

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

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

...