загрузочный баннер

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
Аватара пользователя
ЧИЖ
Сообщения: 29
Зарегистрирован: 24 фев 2007, 23:57
Контактная информация:

Думаю мой вопрос не сложен)
Как сделать чтобы пока формируется страница пользователю показывалась страница - заставка несущая информацию о том что запрошенная страница грузится?

дело в том что на моем сайте есть мониторинг игровых серверов и время формирования страницы мониторинга чуть больше суммы пингов серверов ( а если некоторые сервера не доступны то их пинг 2секунды) - хотелось бы сделать чтобы во время пингования PHP сценарием серверов отображался баннер и как только страница полностью готова она отправлялась пользователю
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

>>ping.php<<

timestamp = DATE + TIME

showBannerHTML(timestamp); // see clientHTML

exec("ping.bin timestamp&")

-------------------------

>>ping.bin<<

ping all servers

createfile("file" + timestamp)

-------------------------


>>test.php<<

if (fileexists("file" + timestamp)) {

showHTML( data from file );

remove_file ("file"+timestamp);

} else {
showEmpty();
}

-------------------------


clientHTML:

showHTMLBanner

innerHTML = "";

while(innerHTML is empty) {

innerHTML = AJAX : test.php?timestamp=$timestamp

wait( 100 miliseconds)
}

removeHTMLBanner

document.setInnerHTML(innerHTML);

-------------------------

я бы делал примерно так ;-)

если что-то непонятно - пиши :-D

P.S. Единственная проблема, если пользователь не дождётся конца и уйдёт со страницы, перестанет вызываться "test.php" и файлик не удалится ...

можно какой-нибудь крон по ночам запускать, чтобы удалять все такие файлики старше одного часа
Аватара пользователя
ЧИЖ
Сообщения: 29
Зарегистрирован: 24 фев 2007, 23:57
Контактная информация:

на скока я понял - это не на php))))) :D

а как бы ты это сделал именно на php

потому что именно сейчас я на практическом применении изучаю php (я вообще все тока на практике изучаю) поэтому хотелось бы не отклоняться от курса

и мне почемуто казалось что все гораздо проще
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

это алгоритм, так сказать.

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

1. "ping.php" - Файл, который запрашивает пользователь

http://www.server.com/ping.php

создаёт метку текущего времени // timestamp = DATE + TIME
(она уникальна для разных пользователей, заходящих на страницу)

затем "возвращает в браузер" твой баннер // showBannerHTML(timestamp);

после чего запускает процесс в бэкграунде системы, // exec("ping.bin $timestamp&");
который будет делать те самые пинги.

я исходил из того, что большинство серверов бегут на *nix подобных системах,
потому и написал: exec("ping.bin $timestamp&");
что значит: запусти программу "ping.bin" с параметром "$timestamp" и доллар - в бэкграунде,
то есть вернись сразу в место вызова, а программа пусть себе бежит


2. "ping.bin" опять же, *nix бинарный файл, может быть bash, но может быть написан и как PHP

он принимает параметр "timestamp" (важно для создания имени файла)
и бежит себе где-то, не важно где и пингует сервера,
как только он закончил своё задание, он создаёт файл с определённым именем: "file"+timestamp,
таким образом мы гарантируем, что имена файлов будут уникальными

3. "test.php" служебный, так сказать, PHP скрипт,
который проверяет, создал ли "ping.bin" файл или нет.
[для синхронизации "ping.bin" и "test.php", оба скрипта получают одинаковые "timestamp" (метку времени)]
если создал - парсит его (возможно) и создаёт из него красивый HTML, готовый быть показанным пользователю,
иначе возвращает пустой HTML документ

4. "clientHTML" (вот здесь-то и происходят чудеса)

это HTML + JS, созданный в пункте 1.

веб страничка, которую получил пользователь,
делает запрос каждые 100 милисекунд скрипту test.php
(который должен быть так же доступен через веб).

[Я бы предложил делать этот запрос через AJAX (Asynchronous JavaScript and XML)
то есть это НЕ PHP, это JavaScript
хотя есть и другие варианты]

и если test.php возвращает пустую страницу, - ждёт дальше,
если же нет, убирает баннер (при помощи JS) и выдаёт содержание полученного HTML документа


-----

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

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