Autor Zpráva
jousef
Profil *
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
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 *
super, díky!
AM_
Profil
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
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
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 *
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
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 *
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.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0