Реклама на сайте Advertise with us

Чем это делается?

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 27/05/12 в 08:36       Ответить с цитатойцитата 

есть скрипт обработки строковых данных из формы. Чем можно следить за процесом обработки визуально?
Кинул в форму 10к строк, все это записывается в файл. По логике то понятно как определять.
От общего числа всех строк вычитать каждую сделаную.
и писать к примеру сделано 1 из 10000
Ну или смотреть сколько строк в результирующем файле и по тому же принципу
сделано 1 из 10000
Но как я понял пхп сам такое не делает, он может только сказать, всё, сделал icon_smile.gif

0
 



С нами с 30.04.12
Сообщения: 51
Рейтинг: 157

Ссылка на сообщениеДобавлено: 27/05/12 в 09:25       Ответить с цитатойцитата 

Навскидку тут надо разделять непосредственно обработчик и скрипт, который будет отдавать информацию о текущем прогрессе.
Примерно так:
при сабмите формы отправляется один ajax-запрос и начинается периодический опрос другого скрипта, который возвращает значения вида "5%", "8%" и т.д.

Другой вариант, что сабмит формы будет не со всеми данными, а "порционно" происходить. То есть жмёшь кнопку, а вместо 10 тысяч на сервер уходит лишь 1000, при получении ответа изменяется индикатор прогресса и отправляется ещё 1000.

Заключительный вопрос: сколько времени затрачивается скриптом на обработку среднестатистической порции данных? Может быть индикатор вовсе не нужен?

Тернии, через которые

9
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 27/05/12 в 11:05       Ответить с цитатойцитата 

один процесс из строки длится примерно 2-3сек
просто в цикле есть еще загрузка изображения на локальную машину и его обработка поэтому так долго.

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 27/05/12 в 11:27       Ответить с цитатойцитата 

php делает такое trollface.png
команда flush();
попробуй такой скрипт:
Код:

while($j<10){
echo ++$j;
sleep(3);
flush();
}

2
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 27/05/12 в 12:08       Ответить с цитатойцитата 

ок, спасибо. попробую
чет уже который раз ставлю +8 а выдается другая циферка icon_confused.gif

0
 



С нами с 30.04.12
Сообщения: 51
Рейтинг: 157

Ссылка на сообщениеДобавлено: 27/05/12 в 12:09       Ответить с цитатойцитата 

В таком случае я бы, на самом деле, сделал бы js-цикл со стороны клиента.

Тернии, через которые

8
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 27/05/12 в 12:19       Ответить с цитатойцитата 

мне тоже кажется что нужно не пхп
попробовал

Код: [развернуть]


но ничего.

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

у меня в начле скрипта стоит set_time_limit(0);
ибо времни на полную обработку уходит до нескольких часов поэтому лимиты снял

0
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 27/05/12 в 12:35       Ответить с цитатойцитата 

как я понял чтоб чтото отображалось должно быть прерывание
что то типа:
старт цикла, пауза, отображение, старт и так пока идет работа.

0
 



С нами с 30.04.12
Сообщения: 51
Рейтинг: 157

Ссылка на сообщениеДобавлено: 27/05/12 в 12:41       Ответить с цитатойцитата 

Так может тогда проще не городить форму, интерфейс, а запускать из консоли (ssh), там и прогресс проще выводить, и ошибки отлавливать.

Тернии, через которые

8
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 27/05/12 в 12:49       Ответить с цитатойцитата 

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

0
 



С нами с 30.04.12
Сообщения: 51
Рейтинг: 157

Ссылка на сообщениеДобавлено: 27/05/12 в 12:59       Ответить с цитатойцитата 

Если есть ssh-доступ к машине, на которой всё выполняется, то:
1. Скрипт переделывается с обработки входных данных из формы на обработку входных данных из файла. То есть у тебя там где-то есть конструкция вида
Код:
$data = $_POST['data'];
которую надо будет сменить на
Код:
$data = file('./uploadedfile');
Также в цикле делаешь вывод информации о прогрессе: в каждой итерации срабатывает счётчик вида
Код:
$i++
и вывод
Код:
echo $i . ' from ' . count($data) . ' done' . PHP_EOL;

2. По ftp или scp закачивается файл с данными (содержимое формы) на сервер к скрипту.
3. Заходишь по ssh, запускаешь screen (на случай неполадок с сетью), cd /path/to/your/script; php ./yourscript.php

Если приведёшь пример скрипта, то можно прям тут его модифицировать.

Тернии, через которые

8
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 27/05/12 в 15:12       Ответить с цитатойцитата 

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

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 27/05/12 в 15:52       Ответить с цитатойцитата 

Lexikon писал:
понял, пологаю что в моем случае это невозможно. нет всего того что нужно, по крайней мере на данный момент.
спасибо.
решил что без этого обойдусь, это просто думал не проблема, а выходит не всё так просто, в моем случае.


все возможно, просто не разобрался или не до конца понял некоторых вещей, можешь загуглить "php progress bar" там даже в процентиках можно выводить процесс исполнения trollface.png
я такой делал для аплоада фоток и все прекрасно работало во всех браузерах, кроме ИЕ, там у меня проблемы с css trollface.png

8
 



С нами с 03.02.11
Сообщения: 842
Рейтинг: 301

Ссылка на сообщениеДобавлено: 27/05/12 в 15:55       Ответить с цитатойцитата 

Lexikon писал:
выходит не всё так просто, в моем случае.
попробуй в скрипте вставить что-то вроде:
Код:
echo str_repeat(' ', 256)."\r\n"; //не обязательно. если юзаешь IE, то в начале файла надо сделать вывод 256 пробелов: - вот такой тупой осел.

echo $n." строка из ".$x."<br>\r\n"; //"\r\n" обязателен. браузер пока не получит строку целиком - ничего не выведет.
ob_flush(); //иногда flush не пашет - настройки пхп видимо...
flush();
еще можно, чтобы скрипт писал положение дел в файл, а уже этот файл выводить в iframe и рефрешить его каждые 3-5 сек...

9
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 27/05/12 в 19:12       Ответить с цитатойцитата 

Lexikon писал:
я заполняю форму жму выполнить и пока в браузере крутиться круг вместо курсора показывая что работа идет. Но пока все не закончится ничего не отобразиться.

Естественно, ты же форму синхронным методом сабмитишь. icon_smile.gif

Вот как это делается на самом деле.

index.html (или index.php, или где там у тебя форма):

Код:
<!DOCTYPE html>
<html>
   <head>
      <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
      <script>
         var intervalID = false;
         var hardJob = function () {
            jQuery.ajax({ // Сабмитим форму асинхронно
               type: 'POST',
               url: 'job.php',
               data: jQuery("#data").serializeArray(),
               success: function () {
                  window.clearInterval(intervalID);
                  intervalID = false;
                  jQuery('#progress-bar').css('width', '100%').html('Completed');
               }
            });
            if( ! intervalID) {
               jQuery('#progress-bar-wrapper').show();
               intervalID = window.setInterval(function () {
                  jQuery.ajax({ // Раз в секунду запрашиваем прогресс
                     type: 'GET',
                     url: 'progress.php',
                     success: function(progress) {
                        jQuery('#progress-bar').css('width', progress + '%').html(progress + '%');
                     }
                  });
               }, 1000);
            }
         };
      </script>
      <style>
         #progress-bar-wrapper {
            background:#ddd;
            width:200px
         }
         #progress-bar {
            background:#fd0;
            color:#000;
            height:20px;
            padding:0;
            width:200px
         }
      </style>
   </head>
   <body>
      <form id="data">
         <input type="button" value="Submit" onclick="hardJob()"/>
      </form>
      <div id="progress-bar-wrapper"  style="display:none;">
         <div id="progress-bar" style="width:0%"></div>
      </div>
   </body>
</html>


job.php (здесь процессится форма):

Код:
<?php
$file = realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR.'progress.txt';
$total = 13;
$p = 100 / $total;
for($progress = 0; $progress < $total; $progress += 1) {
   file_put_contents($file, floor($progress * $p));
   sleep(1); // Якобы процессится форма
}
?>


progress.php (здесь отдаётся прогресс):

Код:
<?php
header('Pragma: no-cache');
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Thu, 1 Jan 1970 00:00:00 GMT');
header('Content-type: text/html');
echo file_get_contents( realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR.'progress.txt' );
?>


progress.txt (здесь будет храниться прогресс)
Код:


Все четыре файла должны быть в одной папке.

Вопросы? icon_smile.gif

11
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »