PHP console like output

Zdravo,
zanima me, ali ima kdo kakšno idejo ali referenco, kako bi naredil izpis nekega background procesa v stilu konzole.

Npr. parsanje XML.
Ko klikneš na uvoz se v enem spodnjem div-u začne "odvijati" skripta.

ID 4034 spremenjena cena...
ID 4035 spremenja zaloga...

Najbolj simple je, da proces, ki dela uvoz, piše v en file, ta se pa prek AJAX-a naloži v div, vendar potem se ta zadeva uporabniku ne prikazuje zaporedno, ampak se vedno refresha cel file... Kar je načeloma ok, vendar ni perfektno.

Drugi način je z bazo, samo je malo bolj zahteven.

Je že kdo kdaj naredil/videl kaj takega (brez Java appleta)?

5 odgovorov

Poglej si progress bar od zend FW-ja (jspush in jspull adapterja)

http://zendframework.com/manual/en/zend.progressbar.introduction.html

1

Cool, vsaj nekaj. Bom pogledal, hvala

Obstaja način, ki dejansko pušča AJAX request connection odprt, to si imenuje long polling ali commet.

Long polling

Kar se tiče serversida lahko delas json ali xml, v katerega zapises ID vrstice in dejanski message. V userjev session spremnjlivko shranis zadnjo prikazano vrstico, ki je bila poslana skozi AJAX. Torej, ko bo javascript naredil naslednji request ze na nivoju streznika pogledas ce so v jsonu/xmlju vrstice z IDjem večjim od tistega v SESSION-u za tega userja in ce so posljes userju nazaj samo tiste vrstice. Ce je session prazen posljes vse vrstice in zapises zadnjo, ce je vrstica v sessionu enaka zadnji v json/xml ne posljes nazaj nic.

Torej recimo $_SESSION'pollinglastline' naj ti bo tisti pointer, ki ti pove do kam je user videl output. Ker je session globalna in persistant spremenljivka, tega podatka ne bos izgubil, tudi ce delas vec locenih AJAX requestov. Samo eno opozorilo: Skripta, ki nalozi to stran, na kateri bos imel perodicni loader ali long polling, naj poresitira session spremenljivko, tako da bos kljub refreshu cele strani videl splet kompleten ajax/xml.

najbolj enostavno je, da ko aploudaš, da form kaže na isti fajl. ko začneš s procesiranjem, začneš tudi z info izpisi in za vsakim daš flush.

Div, kjer se izpisujejo podatki, ima jasno črno ozadje in zelene courier fonte :)