[PHP]Pagina laten opbouwen terwijl script loopt

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In een script controleer ik of een domein naam nog beschikbaar is.
Echter tijdens deze controle stopt de opbouw van de pagina.

Nu dacht ik dit simpel op te vangen met een ob_flush() echter dat werkt dus niet zoals ik had gedacht.

Nadat de controle klaar is krijg ik dan ineens allemaar errors zoals:

Warning: Cannot modify header information - headers already sent by (output started at..............
De error verwijsd dan naar oa deze lijn:
setcookie("domain1", $domain1, time()+3600);

De domein check wordt gestart dmv een functie :
domeincheck();

Nu wilde ik voordat deze functie gestart werd even een tekst plaatsen dat dit soms even kan duren, zoiets als:
PHP:
1
2
echo "<center><b>Een ogenblik, opgegeven domeinnaam wordt gecontroleerd dit kan even duren!</center></b>";
domaincheck();


Ik heb al diverse flush functie's geprobeert maar geen enkele doet wat ik verwachte.
Namelijk die tekst laten zien en het script probleemloos afwerken.
De meeste flush functie's laten wel de tekst zien en draaien de functie maar komen dan ineens met een error dat header al verzonden zijn.

Het script zelf werkt prima, het enige wat het probleem is dat je soms moet wachten op het resultaat voordat de pagina verder wordt opgebouwd.

Iemand een tip hoe ik dus die tekst kan laten zien en het sccript normaal kan laten werken?

Acties:
  • 0 Henk 'm!

Verwijderd

Wat dan beter werkt is een pagina genereren die in een iframe of iets dergelijks een andere pagina laadt met dat scriptje. Je zorgt dat het resultaat met javascript aan het document wirdt gegeven, en daar laat je de boodschap zien. Op deze manier kun je een volledige pagina laten zien, en hoef je je geen zorgen te maken over de output.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 10 mei 2005 @ 20:00:

Het script zelf werkt prima, het enige wat het probleem is dat je soms moet wachten op het resultaat voordat de pagina verder wordt opgebouwd.

Iemand een tip hoe ik dus die tekst kan laten zien en het sccript normaal kan laten werken?
Je geeft eigenlijk zelf al het antwoord. Je bouwt de pagina op en je wacht op de rest van de output. De rest bestaat uit een javascript dat een divje kan updaten. Dat in dat divje staat standaard die 'even geduld' tekst. Bij het laden van het javascript(+ benodigde data om div te vullen) aan het einde van de pagina wordt het divje bijgewerkt.

Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Het verzenden van de tekst met flush functies kan best, op voorwaarde dat je geen headers meer gaat zenden, dus ook geen cookies :) . En manieren als Ajax, en wat Cheatah zegt kan natuurlijk ook :) .

DM!


Acties:
  • 0 Henk 'm!

  • Bartoz
  • Registratie: November 2000
  • Niet online
Volgens mij moet het via output buffering wel mogelijk zijn. Je kan de output naar de browser vasthouden totdat je een bepaald commando geeft. Na je acties stuur je dan de hele output buffer in 1 keer

Zoiets al geprobeerd?:

<?php

ob_start();
echo "Een ogenblik";

setcookie("cookiename", "cookiedata");

ob_end_flush();
?>

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Het ligt er een beetje aan wat je precies wil. Hangt het zetten van het cookie af van wat er in domaincheck() gebeurt? Als dat zo is dan moeten er kunstgrepen aan te pas komen waarbij die van Cheetah het netste is volgens mij.
Als dat echter niet zo is dan hoeft dat helemaal niet. Dan zet je gewoon eerst je cookie en voer je dan je lange functie uit. De melding kun je forceren met flush():
PHP:
1
2
3
4
5
6
7
8
setcookie('name','data');
//andere headers...

echo 'Een ogenblik geduld, domein wordt gecontroleerd...';
flush();
checkdomain();

//rest van de pagina

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Je kan ook 2 pagina's gebruiken. De eerste laat een berichtje zien, met checkdomain(), als die klaar is stuur je die output naar pagina 2 waar de cookie geschreven wordt, wat snel gaat dus geen output is nodig, en ga je weer naar pagina 1 met een ander domein oid
Pagina: 1