orafal
15.10.2007, 08:48:38
Mam długo wykonujący się skrypt, który działa w oparciu o pewną pętlę. Jak można wyświetlać w przeglądarce postęp w tej pętli - na przykład procentowo, tak aby użytkownik wiedział, że przeglądarka się nie zawiesiła.
Dzięki i pozdrawiam.
MaximusDM
15.10.2007, 10:16:15
hmm w zależności od bazy można ułożyć odpowiedniego selecta, ale to samo osiągniesz odpalając np. zabę - toad
misiek172
16.10.2007, 10:21:47
na łatwizne idąć można zrobić animowanego GIFa, jesli się zatnie to przestanie się kręcić ;P.
Jeśli chciałbyś mieć ilość / 100% to juz nie takie proste, ponieważ jezeli masz pętle, która nie wiadomo kiedy się kończy no to wtedy nie da się przewidzieć końca, no bo jak?

Ewentualnie obliczyć średni czas ładowania i według niego liczyć postęp.
Nie można, PHP nie działa w ten sposób - każda informacja wysłana do przeglądarki jest automatycznie dodawana do Tych wysłanych wcześniej, co skutecznie uniemożliwia zbudowanie wszelkiego rodzaju pasków postępu.
Za to chyba w Perlu się da
templar
16.10.2007, 23:01:08
Kiedyś byłem niestety zmuszony do zrealizowania czegoś takiego.
Upierałem się, wmawiając pracodawcy, że nie dam rady - ale miałem to zrealizować i koniec.
Co więc uczyniłem:
Utworzyłem 2 ramki, bez borderu, w górnej znajdował się animowany GIF odpalany od razu przy załadowaniu, ale jego wyświetlanie znajdowało się w pętli while, która za każdym razem sprawdzała zawartość pliku tekstowego, czy jest w nim jeszcze "0", czy już "1". Po sprawdzeniu tego warunku, jeśli było "0", to <meta refreshem> odświeżałem górną ramkę w intervalu 1-2 sekundy.
W dolnej ramce na starcie skryptu zapodałem ładnie set_time_limit(), później zapis "0" do tego pliku tekstowego, po czym zapis "1" - zaraz po pętli/operacjach obliczeniowych. W tym momencie pętla w górnej ramce odczytała tę "1", zaprzestała wyświetlania GIFa, i wyświetliła informację, że skrypt zakończył swoje działanie.
Pozdrawiam.
To ja gratuluję samozaparcia i pomysłowości.
Ale nadal nie widzę sensu robienia czegoś w technologii do tego nie przystosowanej.
edit:
I te cykanie w czasie odświeżania w IE, bleh
matix
17.10.2007, 07:10:15
Weź skorzystaj z funkcji
flush(). Dzięki niej możesz zrobić taki prosty postępowy progressbar. Za każdym wykonaniem pętli, niech doda jedno:
Załóżmy. Jeśli wykona ich dzisięć to wtedy jest koniec. Wiadomo. A jak to policzyć to już zwykła matma. To takie luźne przemyślenie z rana przed szkołą, więc mogę tu coś pomylić, za to przepraszam

Pozdro
orafal
19.10.2007, 22:36:34
Cytat(LBO @ 16.10.2007, 20:08:36 )

Nie można, PHP nie działa w ten sposób - każda informacja wysłana do przeglądarki jest automatycznie dodawana do Tych wysłanych wcześniej, co skutecznie uniemożliwia zbudowanie wszelkiego rodzaju pasków postępu.
Za to chyba w Perlu się da

To byłoby też rozwiązanie. Więc jak zrobić, żeby po każdym kroku tej pętli "for" dopisać do już istniejącej treści, że praca posunęła się do przodu i natychmiast wyświetlić to w przeglądarce? Ta pętla nie ma wielu powtórzeń, więc nie zrobi mi się strona długa jak papier toaletowy

.
michu2510
20.10.2007, 11:34:41
A ja przy okazji się zapytam jak zrobić taki pasek jak na o2 w poczcie jest przy uploadzie.
k1ller
22.10.2007, 17:27:29
robisz sobie taka funkcje w PHP:
function UpdateDiv($mess)
{
echo '<script type="text/javascript">';
echo 'Update_cue_info(\''.addslashes($mess).'\');';
echo '</script>';
flush();
}
do tego na stronie musisz miec ten skrypcik:
function Update_cue_info(mess)
{
var update_info_el = document.getElementById('nazwa_twojego_diva_do_podmianek');
update_info_el.innerHTML = mess;
}
</script>
no i oczywiscie sam div gdzies na stronie:
<div id="nazwa_twojego_diva_do_podmianek">PLaduje...</div>
Jezeli nie mozesz wyliczyc procentowo postepu, to przynajmniej mozesz wyswietlac informacje co skrypt robi, np w jakim momencie sie znajduje albo cokolwiek.
Robisz to odpalajac w php
UpdateDiv('Teraz cos robie.');
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.