Verständnisfrage zur Funktion "flush()"
Michael - Hannover
- php
Hola !
laut PHP Handbuch
"flush -- Der Ausgabe-Puffer wird geleert und alle Zeichen ausgegeben
"
heißt das jetzt, dass ohne flush() Befehl im Script der (apache)Server bis zum Ende des Scriptes (oder Buffers) wartet bevor er was zum Client schickt ?
ist es dann sinnvoll z.B. in Klassen/Funktionen generell ein "flush" vor dem return Befehl zu setzen ? Oder lohnt sich dass erst bei größeren Projekten (Forum etc.) ?
MfG
Michael
nein, es ist sicherlich nicht sindvoll ein fulsh vor ein return zu setzen, da es sicherlich gar keinen sinn macht. ích hab selbst ein größeres projekt (Forum) http://www.programming-time.de/portal/index.php?go=forum~A7~showboard/ und flush nicht verwendet!
Hello,
laut PHP Handbuch
"flush -- Der Ausgabe-Puffer wird geleert und alle Zeichen ausgegeben"
heißt das jetzt, dass ohne flush() Befehl im Script der (apache)Server bis zum Ende des Scriptes (oder Buffers) wartet bevor er was zum Client schickt ?
das kommt darauf an, wie lange das Script läuft und welche Aufgabe es hat.
Flush() funktioniert scheinbar nur auf Linux/Apache, nicht aaber auf Windows.
Wir haben doch da gerade eine größere Untersuchung zum Locking als Thread. In den Testscripten wird auch Flush beunutzt, weil dei Scriote bis zum Connection_Aborted() laufen sollen, aber der User zwischendurch erfahren soll, dass das Script noch lebt.
siehe [pref:t=85718&m=505199]
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Moin Tom,
Flush() funktioniert scheinbar nur auf Linux/Apache, nicht aaber auf Windows.
das ist mir aber gaaanz neu. Natürlich funktioniert der flush() auch unter Windoof. Die Eigenart dabei ist nur, daß man den Ausgabebuffer künstlich bis auf 256 Zeichen füllen muß, sonst wartet flush() bis der Buffer gefüllt ist.
Das hier ist so eine Methode:
print str_repeat(" ", 300) . "\n";
Der flush() erwartet auch eine vollständige html Page, also nicht
irgendwo zwischen <body> </body>. ( Wenn den eine Page augegeben werden soll )
Gruß
Mike
Hello,
Flush() funktioniert scheinbar nur auf Linux/Apache, nicht aaber auf Windows.
das ist mir aber gaaanz neu. Natürlich funktioniert der flush() auch unter Windoof. Die Eigenart dabei ist nur, daß man den Ausgabebuffer künstlich bis auf 256 Zeichen füllen muß, sonst wartet flush() bis der Buffer gefüllt ist.
Das hier ist so eine Methode:
print str_repeat(" ", 300) . "\n";Der flush() erwartet auch eine vollständige html Page, also nicht
irgendwo zwischen <body> </body>. ( Wenn den eine Page augegeben werden soll )
Wenn es schon ginge, würde ich diesen Thread in das Projekt aufnehem un d reistrieren. *gg*
Ich werde mir das aber mal merken und zu gegebener Zeit darauf zurückkommen. Im Moment sehe ich jedenfalls keine Verifikation für diese Aussage.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Moin Tom,
Wenn es schon ginge, würde ich diesen Thread in das Projekt aufnehem un d reistrieren. *gg*
Ich werde mir das aber mal merken und zu gegebener Zeit darauf zurückkommen. Im Moment sehe ich jedenfalls keine Verifikation für diese Aussage.
diese Aussage ist definitiv TRUE, ich verwende Flush() in einem Intranet Projekt, und es funtzt!
Gruß
Mike
Hallo, Mike!
diese Aussage ist definitiv TRUE, ich verwende Flush() in einem Intranet Projekt, und es funtzt!
das hier auch?
<?php
static $i = 0;
while ($i < 5) {
++$i;
print str_repeat(" ", 300).$i."<br>\n";
flush();
sleep(1);
}
?>
kannst du uns evtl. mal deine httpd.conf zeigen, das wir mit unserer vergleichen können? an irgendwas muss es ja liegen.
könnte es an der gzip-komprimierung des apache liegen?
welche software (apache-/php-version, OS) verwendest du?
freundl. Grüsse aus Berlin, Raik
Moin Raik,
<?php
static $i = 0;
while ($i < 5) {
++$i;
print str_repeat(" ", 300).$i."<br>\n";
flush();
sleep(1);
}
?>
kannst du uns evtl. mal deine httpd.conf zeigen, das wir mit unserer vergleichen können? an irgendwas muss es ja liegen.
könnte es an der gzip-komprimierung des apache liegen?
welche software (apache-/php-version, OS) verwendest du?
ich habe dein Script kopiert und getestet. Es funktioniert.
Microsoft-IIS/5.0 / PHP 4.2.2 / WIN2000 + XP
Daher keine httpd.conf :-(
Gruß
Mike
Hello,
<?php
static $i = 0;
while ($i < 5) {
++$i;
print str_repeat(" ", 300).$i."<br>\n";
flush();
sleep(1);
}
?>
kannst du uns evtl. mal deine httpd.conf zeigen, das wir mit unserer vergleichen können? an irgendwas muss es ja liegen.
könnte es an der gzip-komprimierung des apache liegen?
welche software (apache-/php-version, OS) verwendest du?ich habe dein Script kopiert und getestet. Es funktioniert.
Microsoft-IIS/5.0 / PHP 4.2.2 / WIN2000 + XP
Daher keine httpd.conf :-(
Es wir ja immer spannender
Wieso geht das dann bei der Apache-PHP-Version für Windows nicht?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Moin Tom und Raik,
<?php
static $i = 0;
while ($i < 5) {
++$i;
print str_repeat(" ", 300).$i."<br>\n";
flush();
sleep(1);
}
?>
Es wir ja immer spannender
Wieso geht das dann bei der Apache-PHP-Version für Windows nicht?
Ich habe das oben stehende Script mal auf meinen eigenen WebServer implementiert. Bitte checked das mal, und sagt mir ob das funtzt oder nicht. Ich bin doch nicht doof :-))
http://geli.dnip.net/flush_test.php
Ich bin geeeeeeeeeeespannt!
Gruß
Mike
Moin @ all,
laut Doku muss der Buffer auch nur bei Windoof aufgefüllt werden.
Ein Apache sollte den flush() sofort beherschen ohne den Buffer zu befüllen.
Gruß
Mike
Hallo, Mike!
am script liegt es also nicht.
http://fakeraol.homeip.net/a_test/all_headers.php
kannst du das mal mit deiner config vergleichen?
freundl. Grüsse aus Berlin, Raik
Moin Rail,
am script liegt es also nicht.
http://fakeraol.homeip.net/a_test/all_headers.php
kannst du das mal mit deiner config vergleichen?
Net böse sein, aber vergleiche Du :-)
Mike
Hallo, Mike!
Net böse sein, aber vergleiche Du :-)
nöööö. :-D
warum sollte ich.
aber ich kann auch nix finden, was daran schuld sein könnte.
ich vermute mal, dass es am apache liegt, nur wo ... ?
freundl. Grüsse aus Berlin, Raik
Hallo, Tom und Mike!
<?php
static $i = 0;
while ($i < 5) {
++$i;
print str_repeat(" ", 4096).$i."<br>\n";
flush();
sleep(1);
}
?>
so tuts das auch bei mir [man beachte den erhöhten wert (4096)],
undzwar sowohl mit IE 6 als auch firefox 0.8 .
ich tippe auf einen puffer des apachen unter windows, möglicher weise auch bedingt durch das OS.
freundl. Grüsse aus Berlin, Raik
Hello,
print str_repeat(" ", 4096).$i."<br>\n";
Das wäre ja der implizite Beweis dafür, dass es flush() wirklich nicht tut, sondern nur der ausreichend gefüllte Buffer für das Absenden der Daten verantwortlich ist.
Fragt sich dann, was bei der
ob_start();
#schreibe schreibe
ob_end_flush()
dann unter Windows passiert.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo, Tom!
Fragt sich dann, was bei der
ob_start();
#schreibe schreibe
ob_end_flush()
dann unter Windows passiert.
ohne str_repeat(" ", 4096). genausowenig, wie mit flush().
aber wenn man alle relevanten stellen damit präpariert, gehts.
freundl. Grüsse aus Berlin, Raik
Hallo, Mike!
print str_repeat(" ", 300).$i."<br>\n";
wenn es bei dir aber schon mit 300 läuft und bei mir erst mit 4096, dann kann es nur am apachen liegen oder an unterschieden zwischen win2000 (bei mir) und winXP (bei dir). oder hast du es auch unter win2000 probiert?
freundl. Grüsse aus Berlin, Raik
Moin Raik,
oder hast du es auch unter win2000 probiert?
Yep, Win2000 funtzt auch
Gruß
Mike