QUOTE (Alain Aubert @ Mi 5.05.2010, 01:26) Widerspreche bezogen auf den Schein fehlenden Verständnisses mit der Begründung das es nicht funktioniert weil der Buffer nicht gesendet wird
[...]
<delete>Ok, ich merke gerade, dass ich vermutlich alten (vllt auch falschen) Wissen aufgesessen bin und nehme das zurück. Ich sollte wohl nach gewissen Dingen einfach nicht mehr vor'm PC sitzen, und meinen alles auseinander halten zu können.</delete>
<edit>
Sorry Alain, aber war wohl eher nun gerade etwas umnebelt, und nicht die geweideten Pupillen wegen dieser Augentropfen waren Schuld. Ich habe gerade zufällig noch folgendes nochmal gelesen:
QUOTE [...]
implicit_flush boolean
FALSE by default. Changing this to TRUE tells PHP to tell the output layer to flush itself automatically after every output block. This is equivalent to calling the PHP function flush() after each and every call to print() or echo() and each and every HTML block.
When using PHP within an web environment, turning this option on has serious performance implications and is generally recommended for debugging purposes only. This value defaults to TRUE when operating under the CLI SAPI.
[...]
Quelle: http://www.php.net/manual/en/outcontrol.configuration.php
Was ja heißt, dass "implicit_flush = Off" heißt, es erfolgt keine sofortige Ausgabe des Output Buffer, diese ist sowohl bei meiner Version "PHP 5.2.6.dfsg.1-1+lenny8" als auch in der produktiven php.ini des aktuellen PHP 5.3.2 Packets abgeschaltet. Daher gehe ich mal davon aus, dass kein direkte Ausgabe erfolgt. Hier nochmal der Text der php.ini:
CODE ; Implicit flush tells PHP to tell the output layer to flush itself
; automatically after every output block. This is equivalent to calling the
; PHP function flush() after each and every call to print() or echo() and each
; and every HTML block. Turning this option on has serious performance
; implications and is generally recommended for debugging purposes only.
implicit_flush = Off
Also müsste eigentlich zur Ausgabe des aktuellen Stands ein ob_flush() und flush() erfolgen. Wenn dies nicht so ist, landet erst die gesamte Seite (also der gesamte PHP Output Buffer) sofort zum Webserver, also auch ggf. ohne Verzögerung beim Browser, und genau der führt diese Dinge aus (JavaScript & Co), so dass ggf. kein Effekt sichtbar ist.
http://www.php.net/ob_flush
http://www.php.net/flush
Also bin ich doch nicht so durch den Wind, wie ich gerade meinte.
Getestet habe ich es nun natürlich auch (wieso Opera nicht nach den flushen aufbaut keine Ahnung, Firefox macht es entsprechend, wie erwartet):
CODE <html>
<head><title>test</title></head>
<body>
<pre><?php
echo "Start\n";
ob_flush();
flush();
sleep(5);
echo "Break\n";
sleep(5);
echo "Ende\n";
?></pre>
</body>
</html>
Ein Telnet bestätigt aber das Sendeverhalten.
</edit>
PS: CLI != CGI && CLI != Webserver_Module