Эмуляция прогресс-бара

Тема в разделе "PHP", создана пользователем xIcemanx, 16 дек 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. xIcemanx

    xIcemanx Создатель

    Регистр.:
    28 ноя 2008
    Сообщения:
    14
    Симпатии:
    1
    Доброго всем времени суток!
    У меня следующий вопрос...
    Встречал в некоторых скриптах эмуляцию прогресс-бара т.е. ползущей полоски с процентом выполнения долгообрабатываемой операции.
    Допустим, у нас есть 5-10 очень жирных SQL-запросов, которые выполняются 10-20 секунд.
    Каким образом можно сделать динамический вывод полоски?
    В целом я понимаю что делается это через ob_start(); и другие функции буферинга... но КАК именно это делается - въехать не могу. Пересмотрел кучу всвезможных исходников, в том числе исходник Syplex Dumper'a (кстати, как наглядный пример) - потерял только полкило нервов и почти безрезультатно.
    Объясните идиоту, как это работает? :)
    Буду благодарен за любую помощь :bc:
     
  2. judgefog

    judgefog

    Регистр.:
    12 авг 2006
    Сообщения:
    487
    Симпатии:
    335
    1. создаем сессию
    2. выполняем долгоиграющие вещи с записью результата в эту сессию
    3. в бразуер отправляем страницу где просто gif с полоской прогресса, через N секунд она просто перегружается, выдавая результаты из сессии.

    В подавляющем большинстве случаев делается именно так.
     
  3. megamen2008

    megamen2008 Создатель

    Регистр.:
    12 дек 2008
    Сообщения:
    20
    Симпатии:
    4
    я могу ошибаться, но тот же сайплекс работает по схеме - один запрос - какой то процент. т.е. в случае 5 запросов каждый из них будет 20% на прогресс баре и после него нужно посылать на увеличение на 20%.
     
  4. xIcemanx

    xIcemanx Создатель

    Регистр.:
    28 ноя 2008
    Сообщения:
    14
    Симпатии:
    1
    Собственно, волнует не то, каким именно способом будет строиться бар - таблицей, картинкой, хоть обычными точками. Интересует конкретно рабочий пример.
    У меня, допустим, ни один из примеров не давал ползущей полосы. Страница просто полностью загружается через 10-15 секунд, когда отрабатывается скрипт.

    Интересует приём именно без перезагрузки страницы.
     
  5. megamen2008

    megamen2008 Создатель

    Регистр.:
    12 дек 2008
    Сообщения:
    20
    Симпатии:
    4
    пробовали перед echo делать flush(); ?

    зы. также можно использовать яваскрипт.innerHTML вызывая print в пхп-скрипте...
     
  6. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    AJAX (возможно JS+куки). .
     
  7. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    Вряд ли в Sypex Dumper Lite используется вариант с буферизацией вывода (ob_start(), flush() и т.п.), т.к. во время продвижения бара браузер не показывает состояние «Загрузка страницы» - страница уже загружена, просто подгружается ее другая часть (такое поведение наблюдается на сайтах, использующих AJAX).
     
  8. Jameson

    Jameson Читатель

    Заблокирован
    Регистр.:
    25 июн 2007
    Сообщения:
    406
    Симпатии:
    92
    Я с вас фигел. "Вряд ли, должно быть" - а посмотреть под рукой браузера нет?

    PHP:
    </BODY>
    </
    HTML><SCRIPT>l('Подключение к БД `xxxxx`.'1);</SCRIPT>
    <SCRIPT>l('Создание файла с резервной копией БД:<BR>\n &nbsp;- &nbsp;xxxxxx.sql.gz', 1);</SCRIPT>
    <SCRIPT>l('------------------------------------------------------------', 1);</SCRIPT>
    ................
    <SCRIPT>s(65,99);</SCRIPT>
    <SCRIPT>s(70,99);</SCRIPT>
    <SCRIPT>s(76,99);</SCRIPT>
    <SCRIPT>s(81,99);</SCRIPT>
    <SCRIPT>s(87,99);</SCRIPT>
    и т.д. - прямо в теле страницы.
    ajax не используется.
     
  9. Yaggi Jah

    Yaggi Jah Постоялец

    Регистр.:
    15 ноя 2006
    Сообщения:
    75
    Симпатии:
    31
    Наилучший вариант - java script делает запрос к файлу php, который отдаёт процент завершённости, который этот же javascript обрабатывает и отображает.
     
  10. brazer

    brazer Постоялец

    Регистр.:
    16 май 2006
    Сообщения:
    87
    Симпатии:
    10
Статус темы:
Закрыта.