Folgendes Problem: Auf einer Webseite A soll über einen Button ein PHP Skript B gestartet werden, dass über einen längere Zeit hinweg mit echo z.B. log-Ausgaben ausgibt.
In der Aufrufenden Seite A sollen diese Ausgaben während der Laufzeit des Skriptes B in einen DIV Container mit einer bestimmten Höhe geschrieben werden.
Klingt zunächst einfach, ist es aber nicht ganz.
Folgende Lösung: PHP Ausgabepufferung und Ajax State 3.
Im PHP Skript vor einem echo den Ausgabepuffer starten:
if (ob_get_level() == 0) ob_start();
dann nach jedem echo den Puffer leeren:
echo '...'; flush();
Am Ende des Skripts Puffer beenden:
ob_end_flush();
Nun zu Ajax:
In Jquery den Request rückgeben lassen:
var request = $.ajax({
...
});
dann, weil JQuery nicht mit dem State 3 umgehen kann die Behandlung hierfür selbst vornehmen:
request._onreadystatechange = request.onreadystatechange;
request.onreadystatechange = function() {
request._onreadystatechange();
if (request.readyState == 3){
$(outcontainer).append(request.responseText).delay(50).scrollTop($(outcontainer)[0].scrollHeight);
}
};
Zeile 5 bewirkt noch ein kontinuierliches mitscrollen des outputcontainer (muss vorher noch definiert werden).
Weitere Möglichkeit:
http://www.sitepoint.com/php-streaming-output-buffering-explained/