Autor | Zpráva | ||
---|---|---|---|
jousef Profil * |
#1 · Zasláno: 4. 8. 2009, 15:19:53
cau lidi, poradte prosím jakým způsobem dávat uživateli vědět o průběhu nějakého ohromně složitého skriptu. Dejme tomu, že se by se počítalo Pí na 10000000 desetinejch míst a já bych chtěl dávat uživateli vědět jaká setina se právě počítá(je to trošku přehnanej příklad..)
|
||
AM_ Profil |
#2 · Zasláno: 4. 8. 2009, 16:49:04
1) Ten supersložitý skript by mohl někam ukládat svůj průběh (spíše soubor než DB a v nějakých rozumných intervalech, aby nakonec indikátor průběhu nesežral víc času, než samotný skript) a AJAXem si tuhle informaci můžeš číst
2) složitější, ale asi čistější řešení - pomocí socketových funkcí si otevřít vlastní HTTP server přímo ve skriptu a AJAXem se připojovat na něj - zabere to asi dost času napsat a musíš mít na serveru povolenou práci se sockety, ale bude to koncert :) Pozn. nikdy jsem to nedělal, jen předhazuji, jak bych asi začal. Pokud nehraješ o každou milisekundu, první řešení by mělo stačit. |
||
jousef Profil * |
#3 · Zasláno: 4. 8. 2009, 18:42:47
super, díky!
|
||
AM_ Profil |
#4 · Zasláno: 4. 8. 2009, 21:29:25
není zač. v případě prvního řešení si ješte dej pozor, aby více vláken skriptu nepřepisovalo stejný soubor, pokud si skript vyžádá zároveň více uživatelů. Měl by se generovat vždy nějaký unikátní název souboru.
|
||
Aichi Profil |
#5 · Zasláno: 4. 8. 2009, 21:51:33
AM_ radí dobře, ještě bych to upřesnil. Do souboru to radši necpi, musel by si resit kolize. Myslím, že ten průběh si můžeš ukládat do session. Máš např. stránku index.php co dělá ten výpočet a každých 100 iterací do session zapíše pod nějakým ID, která zná ta stránka co ten výpočet spustila, procenta, jak dlouho jí to ještě bude trvat. Na stránce budeš javascriptem pomocí HttpRequestu dělat dotaz na skript, např. info.php?id=XXX a dle id se tenhle skript podívá do session a vrátí ti číslo a ty ho zobrazíš.
|
||
AM_ Profil |
#6 · Zasláno: 4. 8. 2009, 23:37:53
jo to je fakt, vlastně session bude i pro AJAX požadavky zachována a mám pocit že se i samo přenese její ID (na ajax požadavky se aplikují cookies) - to je skutečně nejjistější úložiště.
|
||
jousef Profil * |
#7 · Zasláno: 5. 8. 2009, 10:22:16
ještě jednou dík. pomohli jsme mi
|
||
jousef Profil * |
mám zřejmě teoretické nedostatky v js, jinak si to nedokážu vysvětlit. js ceka az se provede php a pak se teprve spusti. asi si neuvědomuju pár teoretickejch js věci nebo mě zlobí jquery, ale to bych neřekl.
uryvek z kodu: index.php if($_POST) { echo'<script>nacti();</script>'; // nejsem si jist přímo tímhle způsobem, ale zkoušel jsem to i jinak a tady problem snad nevězi //vykonvanej slozitej dlouhej skript + //zde se pravidelne meni $_SESSION['name'] } <div id="aktual"></div> <form action="#" method="post"> url<input type="text" name="url" /> <input type="submit" name="submit" value="odesli" /> </form> JS: function nacti() { //ve skriptu vyuzivam jquery, data sosa spravne $.get("dej_aktualni_stav.php", function(data){ // alert(data); // alert reaguje az po dobehnuti php $("#aktual").text(data); }); setTimeout("nacti()", 100); // kazdy 100ms aktualizuje stav } dej_aktualni_stav.php: session_start(); echo $_SESSION['name']; Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
lordfrikk Profil |
#9 · Zasláno: 5. 8. 2009, 14:31:36
Také se dá použít funkce http://www.php.net/manual/en/function.ob-flush.php, každých x kroků vyprázdní buffer, což znamená, že lze v intervalech AJAXem zjišťovat průběh.
|
||
jousef Profil * |
#10 · Zasláno: 5. 8. 2009, 18:45:34
Taky by se dalo, ale to by nevyřešilo problem. JS nechce pracovat dokud se php neprovede celý. jak potom mám dávát info o aktualnim průběhu.
|
||
Časová prodleva: 15 let
|
0