Zitat von
jpwfour
eine möglichkeit:
PHP-Code:
while($res2 = sql_fetch_assoc($sql2)) {
/* ca 2000 Datensätze verarbeiten */
Anzeige für Admin, was und ob überhaupt etwas getan wird
echo '.';
flush(); //sendet den ausgabe puffer
}
echo 'fertig';
so würde nach jedem verarbeiteten datensatz ein punkt erscheinen, und am ende fertig.
wobei diese option nur auf ca. 40% aller syteme/server funzt, da zum teil der server weiter "puffert", also doch alles erst ausgibt, wenn fertig gearbeitet, oder dein browser weiterpuffert, also auch alle punkte auf einmal erscheinen und nicht nacheinander.
aber einen test ist es ja wert.
die bessere methode wäre, den der while schleife vorausgehenden query per limit abzugrenzen, und dann eben per GET varaibel und einem javascript die limits immer höher setzen.
So hatte ich es ja auch gehabt, dummerweise konnte ich mit flush(); alleine kein Erfolg erzielen, nur mit :
flush();
ob_flush();
wurde das Ergebniss direkt ausgegeben. Die Daten, die ausgegeben werden sollten, stehen direkt vor dem flush();
So sieht es aus (bei einem JS-Noob ) :
PHP-Code:
// blabla
echo '<div align="center"><div id="versand">Es werden <strong>' . $res4a . '</strong> Paidmails der Kampagne <strong>' . $k_name . '</strong> verschickt.<br /><br />';
ob_flush();
flush();
// blabla
?>
<script type="text/javascript">
var count = 0;
</script>
<?PHP
while($res4 = sql_fetch_assoc($sql4)) {
extract($res4);
extract($res21);
?>
<script type="text/javascript">
count++;
zahl.innerHTML = count;
</script>
<?PHP
echo '<div id="zahl" style="font-size:14px; font-weight:bold;"></div>';
ob_flush();
flush();
// blabla
}
echo '</div></div>';
ob_flush();
flush();
im Firefox läuft das Hochzählen für en 1. Durchgang perfekt, allerdings wird für den 2. Durchgang ein neuer DIV unter dem 1. gemacht und der Zähler läuft im 1. DIV wieder hoch, nicht im 2. :/