Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Пауза в выполнении скрипта

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Пауза в выполнении скрипта, а не его полная остановка.
isle
Отправлено: 15 Января, 2010 - 01:03:28
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009  
Откуда: Казахстан, Алматы


Помог: 0 раз(а)




Приветствую, форумчане. Появилась проблема в выводе необъявленной переменной. Но дело даже не в ней. Суть:

Нужно вывести переменную либо создав паузу и повторное выполнение проверки наличия нужного значения переменной, либо вывести переменную, например, через аякс, JavaScript, задав setTimeOut или как-то еще.

Наклепал некую обработку данных, затем хочу вывести время выполнения скрипта, но не внизу страницы, а вверху. Вот сам пример скрипта, который нужно сделать... Скрипт времени:

CODE (text):
скопировать код в буфер обмена
  1. <?
  2. function get_micro_time() {
  3.   list($usec,$sec)=explode(" ",microtime());
  4.   return((float)$usec+(float)$sec);
  5. } $start_time = get_micro_time();
  6.  
  7. $analysis_time = 0;
  8.  
  9. if ($analysis_time != 0) echo $analysis_time;
  10.  
  11. ...
  12.  
  13. $analysis_time = round(get_micro_time() - $start_time,3),' sec.';
  14. ?>


Понимаю, что примерчик тупой и if написан не в тему, поэтому прошу помощи, как правильно это сделать. В сети не нашел, запрос очень рейтинговый, многие ищут, но никто не дает ответов, может кто-то из форумчан с этим сталкивался? Функция sleep делает не паузу, а останавливает весь скрипт, поэтому здесь не катит, while создает зацикливание без паузы... как быть?
 
 Top
vitaliy_mad
Отправлено: 15 Января, 2010 - 01:07:26
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




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

далее:
isle пишет:
Функция sleep делает не паузу, а останавливает весь скрипт

а в чем разница?
 
 Top
isle
Отправлено: 15 Января, 2010 - 01:13:12
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009  
Откуда: Казахстан, Алматы


Помог: 0 раз(а)




vitaliy_mad пишет:
хм... во первых, время испольнения скрипта в начале страницы можно только динамически подгружать... в конце работы скрипты с помощью JavaScript.


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

Цитата:
далее:
isle пишет:
Функция sleep делает не паузу, а останавливает весь скрипт

а в чем разница?


Разница в том, что sleep делает не паузу, а полную остановку всех подгрузок, например, инклюды начнут грузиться только через 10 секунд, а не фоном... Т.е. вообще нет смысла в слипе... либо его нужно на 2 ветки делить: идет обыное фоновое выполнение скрипта, т.е. инклюды и т.д. и вторая ветка дерева, когда обрабатывается второй параллельный скрипт со слипом. Но в гугл- и яндексответах я это дело тоже не нашел, только общие советы, которые мне пока, как новичку, не понятны. Буду рад за любую подсказку.

(Отредактировано автором: 15 Января, 2010 - 01:14:10)

 
 Top
vitaliy_mad
Отправлено: 15 Января, 2010 - 01:22:36
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




Прмиер:
CODE (text):
скопировать код в буфер обмена
  1. <?php $sts=microtime(true);?>
  2. <div id='time'></div>
  3. <!-----вся страница ---->
  4.  
  5. <?php $tcnt=($sts-microtime(true));
  6. echo '
  7. <script type="text/javascript">document.getElementById("time").innerHtml="'.$tcnt.'"</script>
  8. ';
  9. ?>


по поводу паузы:
Пауза для того и создана что бы приостанавливать выполнение скрипта, а то что вам надо является распаралелливанием хотя тяжело себе представляю, зачем выполнять инклуд фоном...
 
 Top
alpha_beta
Отправлено: 15 Января, 2010 - 02:25:22
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




isle, как правильно выше сказали - элементарно делается через JavaScript + Ajax.

1. Создаем html код, который по завершению загрузки документа через JScript устанавливает таймер.
2. По срабатыванию таймера дергаем нужную php процедуру.

Для того, чтобы проще было разобраться с Ajax - см. jQuery.
Завтра, если время будет и сам не разберешься, скину пример.
 
 Top
isle
Отправлено: 15 Января, 2010 - 03:07:36
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009  
Откуда: Казахстан, Алматы


Помог: 0 раз(а)




alpha_beta, спасибо за предложенную помощь, вроде всё сам решил, благодаря подсказке vitaliy_mad, за что тоже большое спасибо. Пробовал так тоже, но не работало... ошибка была в том, что неправильно всё писал - с маленькой буквы, а нужно... вместо "innerhtml" или "innerHtml" (как в примере) написать "innerHTML" и т.д. Предложенный вариант показывает 0.3 сек. работы скрипта, в то время, как мой вариант 6.0 сек., что более похоже на правду.

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

Кстати, echo round(microtime()-$sts,3); не работает потому как выдается большая точность с microtime(true), да еще с экспонентой, а вот так (ниже пример) работает на ура, а без "true" не работает. Может, это кому еще пригодится Улыбка

Весь скрипт, который я наклепал:

CODE (text):
скопировать код в буфер обмена
  1. <?php
  2. function get_micro_time() {
  3.   list($usec,$sec)=explode(" ",microtime());
  4.   return((float)$usec+(float)$sec);
  5. } $start_time = get_micro_time();
  6. ?>
  7.  
  8. <span id="time"></span>
  9.  
  10. <!-- Скрипт обработки данных -->
  11.  
  12. <script type="text/javascript">
  13.   document.getElementById("time").innerHTML="<?php echo round(get_micro_time() - $start_time,3); ?> sec"
  14. </script>


Показывает время выполнения скрипта "6.203 сек". Здорово. Еще раз спасибо за участие.
 
 Top
JustUserR
Отправлено: 15 Января, 2010 - 10:58:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




isle пишет:
Наклепал некую обработку данных, затем хочу вывести время выполнения скрипта, но не внизу страницы, а вверху
Ах вот оно что - самой простой метод в лоб заключается в том что вы выводите время обработки страницы внизу но заклчаете его в <div style="position:absolute: top:3px; left:3px; width:100%; padding:1px; text-align:center">ВРЕМЯ_ВЫПОЛНЕНИЯ</div> и он будет выведен сверху
Также возможны более мощные механизмы - пусть у вас есть PHP-скрипт и обработка чего-то на нем длится достаточно долго и при этом инфорация о каждом этапе обработки записывается в какой-то файл или в сессию - и есть другой PHP-скрипт который выполняется мгновенно и по информации в файле или в сессии может вычислить информацию об основном PHP-скритпе - далее делаете статическую HTML-страницу в которой с помощь JS запускается основной PHP-скрипт в фоновом режиме в Iframe и периодически вызывается второй и с помощью него считывается информация о ходе выполнения задачи
На первый взгляд можно было бы обойтись одним PHP-скриптом но скорее всего пока он будет работать и грузить сервер на полную мощность вывод будет буферизироваться и пока он не завершиться то JS ничего из него не прочитает - а файл можно закрыть чтобы снять буферизацию


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB