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 :: progress bar

 PHP.SU

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


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

> Описание: progress bar для выполнения кода php
isle
Отправлено: 02 Января, 2011 - 09:07:31
Post Id



Гость


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


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




Хочется потренироваться в php на сокетах, но мало информации как на оф.сайте, так и в сети. Собственно загорелся желанием узнать, как правильно реализовываются прогресс-бары для выполнения функций php. Если кто уже делал такое, не могли бы скинуть простенький примерчик, чтоб наглядно разобраться в этом? А вообще, было бы здорово такой пример опубликовать на портале php.su в "примерах" Улыбка

В html статически код такой (в Хроме класно переливается, в Опере просто зелёная полоска):

CODE (htmlphp):
скопировать код в буфер обмена
  1. <center><div id="progress"><progress value="1" max="100" id="mainpage">1%</progress><br />1%</div></center>


Хочется сделать эту "плюшку" динамической, которая бы показывала реальный процент работы php и какая именно функция сейчас работает. Единственно, как я сам понимаю и могу это сделать - долбать сервер аяксом каждую секунду-две на наличие переменной (процента) и его показывать, а в php скидывать "процент" в кеш (БД или ФТП) и подгружать при ГЕТ-запросе аякса. Надеюсь, понятно написал Улыбка

В сети ничего толком нет, как же сделать такой прогресс-бар динамический, показывающий реальную картину. Есть корявые примеры циклов, например, с очисткой буфера, есть вариант на сокетах. Последний заинтересовал, нашел какой-то корявый топик на Хабре, но не получилось его использовать.

Нет ли желающих обсудить как можно такую штуку сваять? Работать должна примерно так:

PHP:
скопировать код в буфер обмена
  1. <?
  2. if (!$go) $go = 0;
  3. f1(
  4. global $go; ++$go;
  5. );
  6. if ($go==1) echo "Выполненно: 10%, функция 1 - ок.";
  7. ...
  8. if ($go==10) echo "Выполненно: 100%, функция 10 - ок.";
  9. ?>


В самом конце прогресс-бар должен исчезнуть.

Вроде как я понял, нужно делать запрос на заголовок сервера, получать его и парсить оттуда переменную (процент), но сделать пока не выходит - не хватает навыков программирования.

П.С. Простите за "портянку" текста Улыбка Если ошибся веткой, перекиньте, пожалуйста.

(Отредактировано автором: 02 Января, 2011 - 09:08:38)

 
 Top
MrSource
Отправлено: 02 Января, 2011 - 09:31:00
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Янв. 2010  
Откуда: Украина, Донецк


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




Простите, но смысл!? Выполнение страниц занимает чаще всего не больше секунды...

P.S. тоже интересно как реализовать)
 
 Top
isle
Отправлено: 02 Января, 2011 - 10:27:53
Post Id



Гость


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


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




MrSource пишет:
Простите, но смысл!?


Эх, чего только люди без смысла не делают Улыбка Например, снеговиков лепят, снег падающий и прочие "плюшки" на сайт вешают, типа часов, погоды, курса валют и т.д... В них тоже смысла нет, но тем не менее, это смотрится индивидуально, красиво, и профессионально иногда, а бывает даже и полезно (в очень редких случаях) Улыбка

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

Поясняю смысл. Иногда сайт грузится не сек, а гораздо дольше, особенно, если флешь, на флеше это легко делается, то я его не знаю и хочу сделать на php. Например, игровой сайт может грузиться 20-25 сек, выводим:

- загрузка карты местности (6 сек.)
- загрузка сохраненных настроек (3 сек)
- загрузка амуниции и продовольствия (4 сек.)
- загрузка текущего уровня игры (5 сек.)
- загрузка завершена. Нажмите Ентер для продолжения.

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

либо такое:

- поиск сайта в соц. сетях и закладках.
- определение ТИЦ и ПР.
- определение внешних ссылок сайта.
- определение других параметров сайта.
 
 Top
MrSource
Отправлено: 02 Января, 2011 - 12:15:11
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Янв. 2010  
Откуда: Украина, Донецк


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




isle пишет:
MrSource пишет:
Простите, но смысл!?


Эх, чего только люди без смысла не делают Улыбка Например, снеговиков лепят, снег падающий и прочие "плюшки" на сайт вешают, типа часов, погоды, курса валют и т.д... В них тоже смысла нет, но тем не менее, это смотрится индивидуально, красиво, и профессионально иногда, а бывает даже и полезно (в очень редких случаях) Улыбка

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

Поясняю смысл. Иногда сайт грузится не сек, а гораздо дольше, особенно, если флешь, на флеше это легко делается, то я его не знаю и хочу сделать на php. Например, игровой сайт может грузиться 20-25 сек, выводим:

- загрузка карты местности (6 сек.)
- загрузка сохраненных настроек (3 сек)
- загрузка амуниции и продовольствия (4 сек.)
- загрузка текущего уровня игры (5 сек.)
- загрузка завершена. Нажмите Ентер для продолжения.

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

либо такое:

- поиск сайта в соц. сетях и закладках.
- определение ТИЦ и ПР.
- определение внешних ссылок сайта.
- определение других параметров сайта.


А оправдана ли нагрузка будет? Ведь если за пример взять тот-же игровой сайт, то нагрузка и так не маленькая, если загрузка 25 секунд, если вы еще будете соккеты постоянно открывать, то это вообще будет краш, но это ИМХО) И еще посчитайте онлайн 5000+ Голливудская улыбка
 
 Top
isle
Отправлено: 02 Января, 2011 - 12:25:51
Post Id



Гость


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


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




MrSource пишет:
А оправдана ли нагрузка будет?


Смеетесь что ли? откуда там нагрузке взяться? Лишние 100-200 байт на 1-2 мб сайт не положат. Ну и речь-то не об этом Подмигивание

Эх, видимо, придётся пока по-старинке, через аякс лепить. Огорчение
 
 Top
JustUserR
Отправлено: 02 Января, 2011 - 12:27:09
Post Id



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


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


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




isle Осуществление создания PHP-приложения позволяющего предоставлять целевому пользователю ресурса информацию о текущем состоянии выполнения ресурсоемкого процесса на серверной стороне - является допустимым и может быть реализовано исключительными средствами языка PHP без обеспечения загрузки дополнительных расширений - в отличие например о осуществления создания элемента progress bar для индикации уровня загрузки файлвого объекта производимого классическими средствами
Конкретно для решения поставленной задачи необходимо создание статической HTML-страницы включающей управляющей JS-скрипт и динамический транспортный элемент Iframe - в таком случае процесс индикации уровня выполнения может быть основан на следующей схеме - серверное PHP-приложения осуществляет последовательные выполнение некоторый атомарный действий и по достижении заданного количества исполненный операций обеспечивает генерацию уровня выполнения задания - для которого осуществляется небуферизированный вывод в поток HTTP-ответа - на основе просмотра которого управляющий клиентский JS-скрипт обеспечивает реальное отображения progress bar-уровня


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
MrSource
Отправлено: 02 Января, 2011 - 12:27:37
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Янв. 2010  
Откуда: Украина, Донецк


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




Удачи Ха-ха
 
 Top
Ch_chov
Отправлено: 02 Января, 2011 - 12:43:39
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




MrSource пишет:
Простите, но смысл!? Выполнение страниц занимает чаще всего не больше секунды...

Есть много задач, где время выполнения скрипта может быть намного больше. Даже больше чем установленный на сервере max_execution_time. Например, работа с архивами, удаленными файлами или ослуживание БД.

ИМХО, сокеты тут совсем не обязательны.

Цитата:
В сети ничего толком нет

Можно ведь посмотреть исходники скриптов, которые это реализуют.
Например, sypex dumper
 
 Top
JustUserR
Отправлено: 02 Января, 2011 - 12:44:54
Post Id



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


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


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




MrSource пишет:
Удачи
Рассматриваемая реализация схемы позволяющая осуществлять передачу информационный полей о уровне выполнения серверной задачи в пользовательский браузер в действительности является работоспособной - однако ее применение целевообразно в случаях когда время затрачиваемое на исполнение целевых действий превышает ресурсы кодирования и передачи информационных полей по каналу связи


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
isle
Отправлено: 02 Января, 2011 - 12:45:48
Post Id



Гость


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


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




JustUserR, блин, спасибо огромное! Что-то сразу не сообразил про фреймы, уже полгода как забыл про них. Идею хорошая после каждой функции писать в файл:

CODE (html):
скопировать код в буфер обмена
  1. <html><head><meta HTTP-EQUIV="refresh" content="3"></head><body><progress value="1" max="100" id="mainpage">1%</progress><br />1%</body></html>


...

CODE (html):
скопировать код в буфер обмена
  1. <html><head><meta HTTP-EQUIV="refresh" content="3"></head><body><progress value="100" max="100" id="mainpage">100%</progress><br />100%</body></html>


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

П.С. Если кто сути не понял, но хочет сделать такую плюшку, распишу подробно весь код. А JustUserR спасибо за идею, пошел клепать.
(Добавление)
Ch_chov, скачал версию лайт, глянул код и ничего не увидел Растерялся В двух местах скриптом какой-то таймер показывается, видимо, вы имели в виду JS? Я тоже так думал сначала, но JS загаживать HTML не хотелось (если шагов много), тогда уж лучше на аяксе, да и на JS нельзя без аякса сделать то, что хочу. Поэтому и думал, что только на сокетах можно как на аяксе посылать запрос и ловить хидер-ответ с переменной (ступенькой выполнения функций, типа F1(), F2()...).

CODE (html):
скопировать код в буфер обмена
  1. .innerHTML = "$timer, сек.";


Это не то, нельзя просто из php это распечатать последовательно (в моем случае по крайней мере). Пока еще сокеты не освоил, воспользуюсь идеей JustUserR.

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

(Отредактировано автором: 02 Января, 2011 - 12:46:57)

 
 Top
Ch_chov
Отправлено: 02 Января, 2011 - 15:55:39
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




isle пишет:
но JS загаживать HTML не хотелось

и не надо загаживать, можно использовать рекурсию или setInterval
 
 Top
isle
Отправлено: 02 Января, 2011 - 16:10:44
Post Id



Гость


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


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




Ch_chov пишет:
можно использовать рекурсию или setInterval


Ага, с аяксом. С этого я и начинал тему, но так долго и сложно + я начал изучать сокеты (прочёл в сети, что так гораздо быстрее работает тот же самый запрос, что на аяксе), но мало информации по ним и мало примеров. Если есть интересные и полные материалы, было б классно ознакомиться, а то я всё по кусочкам ищу.
 
 Top
Ch_chov
Отправлено: 02 Января, 2011 - 16:40:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




 
 Top
isle
Отправлено: 02 Января, 2011 - 16:46:31
Post Id



Гость


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


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




Ch_chov, спасибо, но это не то.

Цитата:
Также мы должны заранее знать, когда будет завершен процесс, обновляющий наш Progress Bar. Progress Bar лучший не выбирать для индикации процессов, которые неизвестно когда закончатся.


Просто заглушку можно и без всяких JS повесить, которая будет тупо висеть, пока не будут получены данные, но данные получаются очень долго, поэтому, чтобы пользователь не нервничал (не думал, что сервер подвис) и не жал в течении минуты десять раз кнопку "обновить", я вот и хочу прогресс-бар повесить, а не картинку - это разные вещи Улыбка
 
 Top
JustUserR
Отправлено: 03 Января, 2011 - 01:52:56
Post Id



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


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


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




isle пишет:
JustUserR, блин, спасибо огромное! Что-то сразу не сообразил про фреймы, уже полгода как забыл про них.
Осуществление создание программного решения для предполагаемой задачи включающей определение текущего уровня выполнения ресурсоемкого задания и обеспечение передачи полученной информации целевому пользователю в режиме реального времени - может быть произведено множеством различных целевых способов - однако одним из ключевых аспектов осуществления корректности функционирования решения является использование статический HTML-элементов или управляющих JS-средств позволяющих реализовывать получение текущей информации от web-сервера в режиме реального времени Конкретно дело заключает в обеспечении кеширования транспортируемого содержимого HTTP-документов от web-сервера что может приводить к задержке с обновление сгенерированных компонентов на клиентской стороне - при этом осуществление полной перезагрузки вложенного iframe-окна не является возможным по причине односвязности инстанции выполняемого PHP-приложения и клиентской части Таким образом в качестве целевого решения позволяющего осуществлять использования минимальное число средств на клиентской стороне - возможно применение двух PHP-программ реализующих выполнение реальных действий и сообщение информации целевому пользователю соответственно - в таком случае предполагаемое решение с iframe-элементами является полноценным вариантом


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный 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