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 :: Пауза в выполнении скрипта
Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009 Откуда: Казахстан, Алматы
Помог: 0 раз(а)
Приветствую, форумчане. Появилась проблема в выводе необъявленной переменной. Но дело даже не в ней. Суть:
Нужно вывести переменную либо создав паузу и повторное выполнение проверки наличия нужного значения переменной, либо вывести переменную, например, через аякс, JavaScript, задав setTimeOut или как-то еще.
Наклепал некую обработку данных, затем хочу вывести время выполнения скрипта, но не внизу страницы, а вверху. Вот сам пример скрипта, который нужно сделать... Скрипт времени:
Понимаю, что примерчик тупой и if написан не в тему, поэтому прошу помощи, как правильно это сделать. В сети не нашел, запрос очень рейтинговый, многие ищут, но никто не дает ответов, может кто-то из форумчан с этим сталкивался? Функция sleep делает не паузу, а останавливает весь скрипт, поэтому здесь не катит, while создает зацикливание без паузы... как быть?
vitaliy_mad
Отправлено: 15 Января, 2010 - 01:07:26
Участник
Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008 Откуда: Украина, Мариуполь
Помог: 0 раз(а)
хм... во первых, время испольнения скрипта в начале страницы можно только динамически подгружать... в конце работы скрипты с помощью JavaScript.
далее:
isle пишет:
Функция sleep делает не паузу, а останавливает весь скрипт
Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009 Откуда: Казахстан, Алматы
Помог: 0 раз(а)
vitaliy_mad пишет:
хм... во первых, время испольнения скрипта в начале страницы можно только динамически подгружать... в конце работы скрипты с помощью JavaScript.
Вот-вот... я и хочу вывести время динамически, но не могу найти нигде примерчик, хотя бы просто на пальцах...
Цитата:
далее:
isle пишет:
Функция sleep делает не паузу, а останавливает весь скрипт
а в чем разница?
Разница в том, что sleep делает не паузу, а полную остановку всех подгрузок, например, инклюды начнут грузиться только через 10 секунд, а не фоном... Т.е. вообще нет смысла в слипе... либо его нужно на 2 ветки делить: идет обыное фоновое выполнение скрипта, т.е. инклюды и т.д. и вторая ветка дерева, когда обрабатывается второй параллельный скрипт со слипом. Но в гугл- и яндексответах я это дело тоже не нашел, только общие советы, которые мне пока, как новичку, не понятны. Буду рад за любую подсказку.
по поводу паузы:
Пауза для того и создана что бы приостанавливать выполнение скрипта, а то что вам надо является распаралелливанием хотя тяжело себе представляю, зачем выполнять инклуд фоном...
Покинул форум
Сообщений всего: 48
Дата рег-ции: Дек. 2009
Помог: 0 раз(а)
isle, как правильно выше сказали - элементарно делается через JavaScript + Ajax.
1. Создаем html код, который по завершению загрузки документа через JScript устанавливает таймер.
2. По срабатыванию таймера дергаем нужную php процедуру.
Для того, чтобы проще было разобраться с Ajax - см. jQuery.
Завтра, если время будет и сам не разберешься, скину пример.
isle
Отправлено: 15 Января, 2010 - 03:07:36
Гость
Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009 Откуда: Казахстан, Алматы
Помог: 0 раз(а)
alpha_beta, спасибо за предложенную помощь, вроде всё сам решил, благодаря подсказке vitaliy_mad, за что тоже большое спасибо. Пробовал так тоже, но не работало... ошибка была в том, что неправильно всё писал - с маленькой буквы, а нужно... вместо "innerhtml" или "innerHtml" (как в примере) написать "innerHTML" и т.д. Предложенный вариант показывает 0.3 сек. работы скрипта, в то время, как мой вариант 6.0 сек., что более похоже на правду.
Всё гениальное оказалось таким простым Странно, что в сети эти скрипты находятся совершенно под другими запросами... (другие похожие примеры, смотрел сейчас "динамическая подгрузка").
Кстати, echo round(microtime()-$sts,3); не работает потому как выдается большая точность с microtime(true), да еще с экспонентой, а вот так (ниже пример) работает на ура, а без "true" не работает. Может, это кому еще пригодится
Показывает время выполнения скрипта "6.203 сек". Здорово. Еще раз спасибо за участие.
JustUserR
Отправлено: 15 Января, 2010 - 10:58:24
Активный участник
Покинул форум
Сообщений всего: 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/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.