Autor | Zpráva | ||
---|---|---|---|
Spud Profil * |
#1 · Zasláno: 17. 2. 2006, 09:37:05
Ahoj,
je nějak možný posílat infromace pro browser, zatímco běží nějaká dlouhotrvající akce? treba ve smycce odeslat po kazdem pruchodu hlasku. <?php echo("cekejte prosim, ... <br>\n"); /* dlouho trvajici kod */ while ($i=0; $i<10; $i++) { echo("zpracovani akce c. $1<br>\n"); volani_funkce_co_dlouho_trva($i) } echo("hotovo"); ?> |
||
T3RMiX Profil |
#2 · Zasláno: 17. 2. 2006, 09:38:50
AFAIK pokud chces informovat uzivatele (browser) o dobe nacitani nesmis na to pouzivat server-side technologii. Takze spis bych doporucil JavaScript, vzhledem k jeho povaze :)
|
||
Marty Profil |
#3 · Zasláno: 17. 2. 2006, 09:43:47
Breaknout cyklus a pamatovat si koncové $i, přesměrovat ho na stránku, kde se mu zobrazí info a parametrem v URL bude $i na této stránce pak budeš pokračovat v cyklu, tam kde si skončil.
Svým způsobem tohle řeší AJAX, tam můžeš uživatele alespoň částečně informovat o probíhání akce, nebo po částečném skončení (viz první odstavec). |
||
Spud Profil * |
#4 · Zasláno: 17. 2. 2006, 09:48:16
hm, AJAX do toho tahat zatim nechci ... myslel jsem, jestlli nejde prubezne vyprazdnovat buffer - koukal jsem na ob_funkce, ale neporadil jsem si s nima.
ob_start(); echo(...); eb_get_contents(); stejne to vyplivna az nakonec vsechno pohromade |
||
Marty Profil |
#5 · Zasláno: 17. 2. 2006, 09:50:12
Buffer vyprázdní paměť ale všechno co si na obrazovku vypsal se zobrazí až po dokončení a stáhnutí stránky u klienta (PHP instrukce běží na serveru a ten je dřív nepošle).
|
||
Spud Profil * |
#6 · Zasláno: 17. 2. 2006, 10:37:21
ok, tak uz jsem nasel reseni - je potreba posilat ob_flush() a po nem jeste flush() - pak to funguje. priklad je v komentarich na help strance u funkce flush() - http://cz.php.net/flush
<?php $pmt = array("-", "\\", "|", "/" ); for( $i = 0; $i <10; $i ++ ){ sleep(1); print "Part $i\t".$pmt[$i % 4]."<br>\n"; ob_flush(); flush(); } ?> |
||
Spud Profil * |
#7 · Zasláno: 17. 2. 2006, 10:37:53
tak jeste jednou ...
<?php $pmt = array("-", "\\", "|", "/" ); for( $i = 0; $i <10; $i ++ ){ sleep(1); print "Part $i\t".$pmt[$i % 4]."<br>\n"; ob_flush(); flush(); } ?> |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0