PHP: Ausgabe von Daten vor und nach dem sleep()?
Dies ist rein für das lernen mehr über output buffering und nix mehr. Was ich tun möchte, ist echo einen string an den browser, sleep 10 Sekunden, und dann echo etwas anderes. Normalerweise wird der browser würde warten, bis die vollen 10 Sekunden und dann poste das gesamte Ergebnis, wie ich würde ich damit aufhören? Ein Beispiel:
ob_start();
echo "one";
sleep(10);
echo "two";
Du musst angemeldet sein, um einen Kommentar abzugeben.
faileN die Antwort ist richtig in der Theorie. Ohne die
ob_flush()
würde die Daten bleiben in den PHP-Puffer und kommen nicht am browser, bis der Puffer wird implizit gespült am Ende der Anfrage.Der Grund, warum es immer noch nicht funktioniert, ist, weil der Browser auch Puffer enthalten. Die Daten werden nun gesendet richtig, aber der browser wartet nach dem aufstehen "eins", bevor es tatsächlich startet das rendering. Ansonsten, mit langsamen verbindungen, Seite Rendern würde wirklich, wirklich langsam.
Den workaround (um zu illustrieren, dass es richtig arbeitet) ist, natürlich, senden eine Menge Daten auf einmal (vielleicht einige riesige html-Kommentar oder sowas) oder verwenden Sie ein tool wie curl auf der Kommandozeile.
Wenn Sie dies nutzen wollen, senden - /Schlaf-Zyklus für einige status-update UI auf dem client, du müsstest einen anderen Weg finden (wie long-polling und AJAX)
Ist, dass das, was du meinst?
Wenn ich das richtig verstanden, Sie zu drucken versuchen, ist Teil der Antwort auf dem Bildschirm, warten Sie 10 Sekunden und der Ausgabe der rest, alle diese, wenn die Seite geladen wird. Dies würde erfordern, dass einige client-side-scripting für die PHP-Ausgabe wird die gesamte Antwort am Ende.
Ich denke, eine Kombination von ob_flush und bündig könnte funktionieren, aber die Pufferung wird nicht behandelt, das gleiche auf jedem browser (wie IE).
Verwende ich die JavaScript
setTimeOut()
Funktion für diese. Es funktioniert einwandfrei.Darüber hinaus können Sie die
<noscript>
- tag für Browser, wo JavaScript deaktiviert ist.Mit ob_flush() - aber wird klar, dass der Puffer-Inhalt. Sie kann nicht Spritzen, ein delay in einen Puffer, es funktioniert einfach nicht so.
Du entweder die Ausgabe den ganzen Puffer auf einmal, oder halten, um den gesamten Puffer für die spätere Verwendung.
geht nicht, weil browser warten, für die volle version des Dokuments, weil das, was browser-engine analysieren die Hälfte der XHTML-Seite und nach diesem (wie Rendern die Hälfte XML?) Lesen der anderen Artikel.müssen Sie darüber nachdenken, senden header vorher zu informieren browser als Binärdaten wurde geschliffen, dann browser erhalten Sie die Daten nach der "recv" - Vorgang und vermutlich Holen Sie sich diese Daten auf dem Bildschirm sofort.Vermisse ich verstehe diese Frage, denn ich denke nie über Spritzen string-buffer 10s schlafen.