Teil der Body vorher an Client schon senden
Kermit
- php
Hi,
ich kenne von anderen Sprachen das man header vorher senden kann
und anschliesend ein Teil von Body hinterher.
Gibt es etwas ähnliches in php?
Mit header() sendet man den header aber wie schickt man body Teile hinterher?
BSP:
header (...); // header wird gesendet
for ($i=0; $i<100; $i++) {
echo ($i.'<br>');
??sende_body?? // user sieht etwas
mach was anderes ...
}
Vorteil dabei: der Client sieht etwas
bevor mein PHP Script ganz durchgelaufen ist.
Vielen Dank
Kermit
Gibt es etwas ähnliches in php?
Also etwa wie auf der Toilette, wenn man Durchfall hat - man sollte zwischendurch immer mal spülen.
»» Gibt es etwas ähnliches in php?
Also etwa wie auf der Toilette, wenn man Durchfall hat - man sollte zwischendurch immer mal spülen.
danke ... genau das habe ich gemeint ... jetzt werde ich noch öfter spülen
Hello,
Gibt es etwas ähnliches in php?
Also etwa wie auf der Toilette, wenn man Durchfall hat - man sollte zwischendurch immer mal spülen.
*rotfl*
Du hast mir den Tag gerettet!
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg

Hello,
»» > Gibt es etwas ähnliches in php?
»»
»» Also etwa wie auf der Toilette, wenn man Durchfall hat - man sollte zwischendurch immer mal spülen.*rotfl*
Du hast mir den Tag gerettet!
Ajax nicht vergessen ;-)
SCNR;
Hotti
Ne, mal ernsthaft: Ajax. Kommt bei mir zum Einsatz, wenn nach einem vom Benutzer ausgelösten serverseitigem Prozess _Teile_ der Seite geändert werden sollten.
Ajax ist cool.
Danke, aber ich möchte an diese Stelle keine Teile einer Webseite vorladen
sonder wenn der User auf ein Button klickt soll ein batch script ausgeführt
werden das 20 s dauern kann. Daher will ich nur ein Hinweis ausgeben das
der Script gestartet wurde und bitte warten.
das tut genau das was ich wollte:
echo('Bitte warten, Script wird gestartet.<br>');
@ob_flush();
flush();
sleep(3);
Gruß
Kermit
»» Hello,
»» »» > Gibt es etwas ähnliches in php?
»» »»
»» »» Also etwa wie auf der Toilette, wenn man Durchfall hat - man sollte zwischendurch immer mal spülen.
»»
»» *rotfl*
»»
»» Du hast mir den Tag gerettet!Ajax nicht vergessen ;-)
SCNR;
HottiNe, mal ernsthaft: Ajax. Kommt bei mir zum Einsatz, wenn nach einem vom Benutzer ausgelösten serverseitigem Prozess _Teile_ der Seite geändert werden sollten.
Hello,
@ob_flush();
Das ist jetzt eingentlich ein Pardoxon. Wenn man die OB-Funktionen benutzt, will man i.d.R. keine Ausgabe, bevor das Script nicht beendet ist. Das hängt ja nicht immer mit den Headern zusammen, sondern kann auch mit "Templates durch die Hintertür" zu tun haben, ähnlich der automatischen Sessionbehandlung von PHP.
Aber wenn man schon den Outputbuffer absendet, und hat keinen Überblick über die Gründe von dessen Nutzung, dann sollte man daran denken, dass die Outputbuffer kaskadierbar sind. Und wenn Du dann vom Batch-Mode wieder zurück zum direkten Mode willst, dann müsstest Du eigentlich die gesamte Kaskade der Outputbuffer leeren
http://de2.php.net/manual/en/function.ob-get-level.php
alo eine Schleife nutzen. Dann kannst Du Dir auch das @ verkneifen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg

Hi,
Das ist jetzt eingentlich ein Pardoxon.
Ja, aber eine mitunter notwendige Maßnahme gegen PHP-Schluckauf. ;)
Dann kannst Du Dir auch das @ verkneifen.
Er hat es von mir abgeschrieben, und glaube mir, ich habe mir dabei was gedacht!
Auch wenn ich jetzt so spontan nicht mehr so genau sagen kann, was. >:-> Die Antwort dürfte sich in den User-Kommentaren des PHP-Manuals befinden oder in meinem Erfahrungsschatz oder in beidem ... ;)
Gruß, Cybaer
Hello,
Dann kannst Du Dir auch das @ verkneifen.
Er hat es von mir abgeschrieben, und glaube mir, ich habe mir dabei was gedacht!
Auch wenn ich jetzt so spontan nicht mehr so genau sagen kann, was. >:-> Die Antwort dürfte sich in den User-Kommentaren des PHP-Manuals befinden oder in meinem Erfahrungsschatz oder in beidem ... ;)
Na, dann such doch nochmal. Vielleicht kannst Du uns dann wieder in die Realität führen :-)
Wenn ich
while(ob_get_level > 0)
{
### buffer auflösen
}
benutzte, sollte das @ doch obsolete werden?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg

Hi,
Na, dann such doch nochmal.
Echt keine Zeit und Lust und beides und überhaupt. :)
benutzte, sollte das @ doch obsolete werden?
Benutze ich aber in dem Countdown-Script nicht.
Nur in meinem Framework benutze ich eine ähnliche Variante.
Ansonsten: s.o. ("Lustfaktor") :)
Gruß, Cybaer
Hello,
Ansonsten: s.o. ("Lustfaktor") :)
Also du postet, obwohl Du eigentlich gar keine Lust dazu hast?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg

Hi,
»» Ansonsten: s.o. ("Lustfaktor") :)
Also du postet, obwohl Du eigentlich gar keine Lust dazu hast?
Nein, ich poste, *wozu* ich Lust habe!
Foren sind abends (und mitunter auch sonst ;->) für mich in der Beziehung, was RTL-2 für den H4ler ist: Davorhocken, aber bitte nichts anspruchsvolles, nichts, wo man nachdenken oder sich anstrengen oder sonstwas tun müßte ... :->
Gruß, Cybaer
Hello,
Foren sind abends (und mitunter auch sonst ;->) für mich in der Beziehung, was RTL-2 für den H4ler ist: Davorhocken, aber bitte nichts anspruchsvolles, nichts, wo man nachdenken oder sich anstrengen oder sonstwas tun müßte ... :->
Achso, dann schicke ich Dir ein

Entspann Dich und ordne Deine guten Ideen :-)
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg

Hi,
Gibt es etwas ähnliches in php?
Mit ob_flush() bzw. flush() und danach noch ein sleep().
Aber manche Browser fangen erst bei 1024 Bytes an, was zu zeigen. Also vorher ggf. Leerzeichen senden ...
Beispiel: http://Coding.binon.net/Countdown
Gruß, Cybaer
Hello,
BSP:
header (...); // header wird gesendet
for ($i=0; $i<100; $i++) {
echo ($i.'<br>');
??sende_body?? // user sieht etwas
mach was anderes ...
}
Das ist schon oft diskutiert worden.
Dass das funktioniert ist aus vielen Grünen unsicher:
PHP hat einen Ausgabebuffer (z.B. 8kB groß), der nur geleert wird, wenn er voll ist,
das Script endet, oder ein flush() ausgelöst wird.
Der Webserver, der die Ausgabe übernimmt, hat wiederum einen eigenen Buffer
Auf dem HTTP-Übertagungswege vom Server zum Client sitzen Proxies oder Hobs mit
eigenen Buffern, die nicht auf die Header (nicht zwischenspeichern) hören
Der Client rendert, wann er will und nicht sofort, wenn er Daten bekommen hat.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg

Hi,
- Auf dem HTTP-Übertagungswege vom Server zum Client sitzen Proxies oder Hobs
mit eigenen Buffern, die nicht auf die Header (nicht zwischenspeichern) hören
? Verwechselst Du da nicht was?
- Der Client rendert, wann er will und nicht sofort, wenn er Daten bekommen hat.
Wohl war. Der Navigator selig renderte z.B. IIRC erst, nachdem er "logische Blöcke" (also z.B. einen kompletten Absatz) hatte.
Die heute gängigen Desktop-Browser rendern aber AFAIK alle das, was sie haben (mindetens sofern es sich um HTML handelt, und nicht um echtes XHTML).
Gruß, Cybaer
Hello,
- Auf dem HTTP-Übertagungswege vom Server zum Client sitzen Proxies oder Hobs
mit eigenen Buffern, die nicht auf die Header (nicht zwischenspeichern) hören? Verwechselst Du da nicht was?
Wie meinst Du das?
Es könnten doch Proxies auf dem Wege sitzen, die nur komplette HTTP-Dokumente weitergeben...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg

Hi,
»» ? Verwechselst Du da nicht was?
Wie meinst Du das?
Was haben Header "nicht zwischenspeichern" mit der Verarbeitung des "streams" zu tun? Entweder IMHO nichts, oder Du meinst Header, die ich nicht kenne.
Es könnten doch Proxies auf dem Wege sitzen, die nur komplette HTTP-Dokumente weitergeben...
Könnte, wäre, wenn ... =:-) Gibt es das?
Woher wüßte ein Proxy, daß er mit dem Weiterleiten warten soll? Wenn ich einen Größen-Header mitsende, und die Größe noch nicht erreicht ist (und das müßte der Proxy auch noch auswerten -> Performanceverschwendung). Aber sonst?
Gruß, Cybaer
Yerf!
» Es könnten doch Proxies auf dem Wege sitzen, die nur komplette HTTP-Dokumente weitergeben...
Könnte, wäre, wenn ... =:-) Gibt es das?
Proxys mit integriertem Virenscanner (in Firmennetzwerken öfters anzutreffen) neigen zu solchem Verhalten. (zumindest sammeln sie erst größere Blöcke um sie dann zu scannen)
Gruß,
Harlequin
Hi,
Proxys mit integriertem Virenscanner (in Firmennetzwerken öfters anzutreffen) neigen zu solchem Verhalten. (zumindest sammeln sie erst größere Blöcke um sie dann zu scannen)
Oh jo, an die habe ich gar nicht gedacht. Viel zu anspruchsvoll ... ;->
Gruß, Cybaer