flush() - Problem mit vorzeitiger Ausgabe

djnelly

Erfahrenes Mitglied
Hallo..

ich habe ein Problem mit flush() und sleep().

Hier ein Script von php.net zu flush();

PHP:
<?php

for ($i = 0; $i<10; $i++){

       echo "<br> Line to show.";
       echo str_pad('',4096)."\n";    

       flush();
       sleep(2);
}

echo "Done.";

?>

Diese Script bei mir auch einwandfrei.

Nun habe ich versucht, diese Option in mein Script einzubauen. Das nach jeder while Schleife flush() und sleep() fungiert.

PHP:
<table width="100%"  border="0">
  <tr align="left">
    <td colspan="8"><strong>Auftragsbest&auml;tigung wird erzeugt...</strong></td>
  </tr>
  <tr>
    <td colspan="8">&nbsp;</td>
  </tr>
  <tr>
    <td width="7%"><em><strong>Status</strong></em></td>
    <td width="7%" align="center"><em><strong>Datensatz</strong></em></td>
    <td width="8%"><em><strong>Kundenummer</strong></em></td>
    <td width="10%"><em><strong>Angebotsnummer</strong></em></td>
    <td width="6%"><em><strong>Pos-Typ</strong></em></td>
    <td width="8%"><em><strong>Pos-Menge</strong></em></td>
    <td width="8%"><em><strong>Pos-Einheit</strong></em></td>
    <td width="46%"><em><strong>Pos-Text</strong></em></td>
  </tr>
<?
include("function.inc.php");

//Daten laden
$sqlkommando_laden = "select * from wws_angebot where angebot_id='$id'";
$sqlanfrage_laden = mysql_query($sqlkommando_laden) or die ("Error: " .mysql_error());
$anzahl_saetze_laden = mysql_num_rows($sqlanfrage_laden);
	if($anzahl_saetze_laden != 0) {
		while($daten_laden = mysql_fetch_object($sqlanfrage_laden))  {
				//Daten in AB eintragen
				$sqlkommando_insert = "insert into wws_auftragsb (angebot_id,kunden_id,datum,pos_id,pos_typ,pos_menge,pos_ekpreis,pos_epreis,pos_rabatt,pos_einheit,pos_text,angenommen) values ('$daten_laden->angebot_id','$daten_laden->kunden_id','$daten_laden->datum','$daten_laden->pos_id','$daten_laden->pos_typ','$daten_laden->pos_menge','$daten_laden->pos_ekpreis','$daten_laden->pos_epreis','$daten_laden->pos_rabatt','$daten_laden->pos_einheit','$daten_laden->pos_text','$daten_laden->angenommen')";
				$sqlanfrage_insert = mysql_query($sqlkommando_insert) or die ("Error: " .mysql_error());
				if($sqlanfrage_insert) {
				$pos_text = nl2br($daten_laden->pos_text);				
					echo"<tr align=\"left\" valign=\"top\">
    					<td><font color=\"#00CC00\">erfolgreich!</font></td>
    					<td align=\"center\">$daten_laden->id</td>
    					<td>$daten_laden->kunden_id</td>
   						<td>$daten_laden->angebot_id</td>
    					<td>$daten_laden->pos_typ</td>
   						<td>$daten_laden->pos_menge</td>
    					<td>$daten_laden->pos_einheit</td>
    					<td>$pos_text</td>
 						</tr>";

						$status = "ok";
						flush();
						sleep(3);
				} else {
				$pos_text = nl2br($daten_laden->pos_text);
					echo"<tr align=\"left\" valign=\"top\">
    				<td><font color=\"#FF0000\">fehlgeschlagen!</font></td>
    				<td>$daten_laden->id</td>
    				<td>$daten_laden->kunden_id</td>
    				<td>$daten_laden->angebot_id</td>
    				<td>$daten_laden->pos_typ</td>
    				<td>$daten_laden->pos_menge</td>
    				<td>$daten_laden->pos_einheit</td>
    				<td>$pos_text</td>
 					</tr>";

					$status = "fail";
					flush();
					sleep(3);
					}
		}
	}


if($status == "ok") {
	echo "<meta http-equiv=\"refresh\" content=\"4;URL=index.php?page=auftragsb&subm=6\">";
}

if($status == "fail") {
?>  
<script language="JavaScript" type="text/JavaScript">
var frage = confirm("Beim Übernehmen einiger Positionen sind Fehler aufgetreten! Beim Übernehmen dieser Auftragsbestätigung werden diese Positionen nicht mit berücksichtigt.\n\nMöchten Sie die Auftragsbestätigung löschen?");
	if(frage == false) {
		document.location.href="index.php?page=auftragsb&subm=6";
		} else {
		document.location.href="index.php?page=auftragsb&action=ab_delete&ab_id=<? echo $id?>&subm=6";
		}
</script>
<? } //Fail ?>
</table>
<br><br><b>Sie werden sofort weitergeleitet!</b>

Es kommt aber keine Ausgabe, nur Wartezeit. Woran könnte das liegen, dass das eine geht und meins nicht?

Danke
 
Ich vermute mal, dass es daran liegt, dass die "geflushten":-) Daten sich in einer Tabelle befinden.
Browser haben zuweilen die Angewohnheit, Tabellen erst anzuzeigen, wenn sie kpmplett gelesen sind, da erst dann ihre Abmessungen berechnet werden können.
 
Zurück