[PHP] Output sturen voor einde script

Pagina: 1
Acties:
  • 124 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Eigenlijk een vrij simpel vraagje, veel gezocht maar niets gevonden (GoT, Google, PHP.net)..

Ik heb een script dat via FTP de inhoud van een aantal mappen download. Aangezien de totale grootte van deze mappen +/- 20 mb is, kan dit proces best een tijdje duren. Aangezien ik de gebruiker niet wil confronteren met een pagina die een hele tijd aan het laden is, zou ik eigenlijk voor elke file een browser output willen genereren, zodat de gebruiker dus de voortgang ziet.

Ik heb al wat geprobeerd met ob_start() e.d. maar kan daar eigenlijk niet veel wijzer uit worden.

Iemand advies?

edit: wellicht is een betere topic naam: meerdere keren output sturen gedurende een script, want dat is eigenlijk wat ik zoek

[ Voor 9% gewijzigd door Verwijderd op 08-05-2007 23:45 ]


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Wat jij moet doen is een cronjob schrijven, die om de zoveel minuten/uren/dagen/weken de inhoud van die FTP ophaalt, en parsed naar een statische HTML pagina, die je dan presenteerd aan ge gebruiker, want op jouw manier belast je de server VEEL te VEEL!

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je kan wel output sturen, maar het is aan je browser om te bepalen wanneer deze getoond wordt. Als je browser output pas wil tonen op het moment dat de gehele HTML binnen is, dan ben je zuur. ;)

Ik denk dat je eens moet nadenken over een AJAX-oplossing, waarbij je telkens hapklare porties af kunt beelden en tonen middels Javascript.

@Snake: ik denk dat het te sterk afhankelijk is van hoe vaak het script gedraaid wordt en wat de precieze bedoeling ervan is om zomaar zo'n advies te kunnen geven. Afhankelijk van wat Bo-oz eigenlijk aan het doen is zijn cronjobs misschien wel helemaal niet zo'n goed plan. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Helmet
  • Registratie: Januari 2002
  • Laatst online: 21-08 15:00
je kan ook eens spelen met het flush(); commando hoewel je inderdaad wel n aar een cronjob wil :)

Icons are overrated


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 21:46
Verwijderd schreef op dinsdag 08 mei 2007 @ 23:44:
Ik heb al wat geprobeerd met ob_start() e.d. maar kan daar eigenlijk niet veel wijzer uit worden.
Iemand advies?
Hoezo wordt je er niet wijzer uit? Veel meer dan ob_start() en ob_flush() en eventueel flush() heb je niet nodig. Het kan allemaal wel een hoop problemen opleveren, zoals -NMe- al opmerkt. Gzip compression mocht, dacht ik, niet enabled zijn en je bent afhankelijk van de browser, welke zelf bepaalt of 'ie al meteen wat doet met je output.

Het kán wel, maar een veel mooiere en waarschijnlijk makkelijkere oplossing is AJAX..

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@all, nu begrijp ik inderdaad waarom ik geen output krijgt met met ob_start en ob_flush, waarschijnlijk vanwege de browser.

Wat betreft een cronjob, helaas niet mogelijk, het gaat er om dat ik een dynamische website op een lokale computer wil kunnen draaien zonder dat er een internetverbinding benodigd is (voor presentatie doeleinden), hierdoor moet af en toe een aantal xml files ge-update worden en een aantal afbeeldingen worden gedownload. Dit heb ik reeds geprogrammeerd in PHP en werkt perfect, alleen de scripts hebben de neiging om lang te duren.. vandaar mijn vraag!

Ik had nog een andere methode bedacht, maar vroeg me af of dat mogelijk is, stel dat ik in script 1, bij elke download een bepaalde $_SESSION variabele verhoog tijdens elke download, dit script aanroep via script 2 die vervolgens de $_SESSION variabele echo'ed, dit script laat ik dan om de x seconden refreshen zodat de gebruiker enig idee heeft hoelang hij nog moet wachten.

edit: Even wat betreft AJAX, hoe moet ik dat voor me zien? AJAX roept mijn script pagina aan, en ik laat de gebruiker tijdens dat de status van de AJAX call aangeeft dat het script nog niet voltooid is een we zijn nog even bezig tekstje zien? Is het ook mogelijk concrete informatie terug te geven tijdens het uitvoer van het proces, of doe ik dat weer met ob_start() en ob_flush()?

[ Voor 16% gewijzigd door Verwijderd op 09-05-2007 09:18 ]


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Dat eerste plan heb ik dus uitgevoerd.

Je hebt de page met een iframe, je neemt een ajax framework, bv xajax, als je dan wilt gaan downloaden kan laat je de iframe alles downloaden via een script, deze geeft elke keer met een session de status door, je laat een ajax script aanroepen, die zichzelf weer aanroept totdat de status is bereikt van download klaar. Dan kan je met ajax dus je html pagina updaten met hoever je bent.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Megamind, ik snap hem niet helemaal, maar ga er eens op studeren! Ik begrijp dat je dus 3 pagina's hebt, 1 die de (ftp)download doet, 1 die de $_SESSION var echo'ed, en tenslotte 1 die het allemaal aanstuurt en de AJAX-requests doet? Hoe weet je dan dat de download klaar is? Sla je dat ook op in een $_SESSION var (bool) ofzo?

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Je en nee; je hebt idd 3 pagina's.

1. Je HTML pagina (mag best HTML of PHP zijn als je wilt)
2. Je PHP download pagina
3. Je ajax request pagina

1. Hierin maak je een IFrame, die is ontzichtbaar, en maak je leeg. Je maakt een submit knop die pagina 2 post naar het iframe én pagina 3, de ajax request opstart.

2. Pagina 2 begint met downloaden van de FTP, je leest eerst uit hoeveel bestanden hij nodig heeft (=100%), dan ga je beginnen met downloaden en lees je bij welk bestand hij is. Dat percentage schrijf je naar een $_SESSION["perc_downloaded_complete"] = $perc oid.

3. Pagina 3, is een ajax handler, deze leest de sessie uit, en schrijft naar je HTML pagina 1 in een DIV of SPAN. Als hij nog niet klaar is (sessie staat nog niet op 100), dan roept het ajax script zichzelf weer aan op het laatst zodat de pagina elke seconde of 5 seconde (je kan een wait erin bouwen) geupdate wordt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@megamind, ok thx, ga ik eens mee aan de slag!
Pagina: 1