Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Индикатор процессов PHP

420
07 апреля 2008 года
Fobos
197 / / 10.03.2006
Здравствуйте!

Как можно на ПХП реализовать индикатор процесса?

Допустим если цикл перебирает огромный массив данных, чтобы постаянно (допустим каждые 100 шагов) клиенту посылались данные в браузер (например добавлялась точка или другой знак индикации)?

Делаю так:
Код:
$cnt = 0;
while($value=mysql_fetch_array($values_arr))
{
   //Какое-либо действие
   .............
   //
   $cnt++;//прибавляю счётчик
   if ($cnt >= 100)
   {
       $cnt = 0;
       echo '.';
   }
}


Простой пример, но линия из точек отображается или на половине ВСЕГО процесса или вообще по его завершению.

Как зделать, чтобы постоянно, когда $cnt>=100 в клиентском браузере появлялась новая точечька?
8
07 апреля 2008 года
mfender
3.5K / / 15.06.2005
Данные сами в браузер не придут. Это браузер должен эти данные попросить и получить. Он же отобразит индикатор.

Значит, надо в цикле запрашивать цифру $cnt браузером через какое-то время, и в зависимости от неё, например растягивать рисунок gif.
420
07 апреля 2008 года
Fobos
197 / / 10.03.2006
Тоесть мне тут нужно JavaScript+AJAX еще прилепить? Или это через ПХП можно реализовать?
8
07 апреля 2008 года
mfender
3.5K / / 15.06.2005
Вообще не понимаю этой затеи. Ты не можешь контролировать процент выполнения. Ну разве что писать в файл этот процент. А уже отдельным процессом читать цифру из этого файла.
420
07 апреля 2008 года
Fobos
197 / / 10.03.2006
Ну смысл чисто в дружественном интерфейсе для пользователя.
Например сейчас я делаю скрипт, который экспортирует с одной БД в другую, с проверкой на наличие, товары. Этот процесс занимает около 5-ти минут, поэтому когда перед пользователем белый экран, он начинает нервничать и думать, что или браузер завис или ещё какие глюки. А так он будет видеть, что процесс идёт. :)

Кстати, за идею с промежуточным временным файлом отдельное спасибо!!!
Я понял, как это можно будет реализовать!
8
07 апреля 2008 года
mfender
3.5K / / 15.06.2005
Обычно делается всё просто: ставится флэшевый индикатор (или gif), который крутится просто, показывая, что что-то происходит.
337
07 апреля 2008 года
shine
719 / / 09.06.2006
Главная фигня с этими прогрессбарами это то, что они задуманы как элемент отображающий время которое пользователь будет ждать. Внутри же кода создатель скрипта может работать не с временем а с определенными моментами исполнения кода. А вот связь между временем и моментами прохождения этих контрольных точек очень слабая. Грубо говоря, запустился какой-нибудь прожорливый процесс, отобрал часть ресурсов у нашего счетчика и реальное время между прохождениями контрольных точек возросло а этого не должно быть по определению прогрессбара. То есть индикаторы процесса в общем случае не могут отображать правильно ход этого процесса.

Сделать можно периодическими опросами сервера. А на сервере где-нибудь это значение хранить (в БД/файле/memcache/...)
353
07 апреля 2008 года
Nixus
840 / / 04.01.2007
Если сервер позволяет держать соединение открытым, то можно и так:

index.php:
[HTML]<div id="progress">none</div>
<script>
function updateProgress(val)
{
document.getElementById('progress').innerHTML = val.toString();
}
</script>
</body>
<iframe src="job_with_progress.php" style="display:none;"></iframe>[/HTML]

job_with_progress.php:
 
Код:
<?php
set_time_limit(0);
for($i = 1; ; $i++)
{
    echo "<script>parent.updateProgress($i);</script>";
    flush();
    sleep(2);
}
?>
420
08 апреля 2008 года
Fobos
197 / / 10.03.2006
Nixus
Спасибо, попробую так!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог