2016-05-06 7 views
4

Hier ist etwas seltsam, ich obwohl dies eine leere Seite und zeigen, Teil für Teil, bis alle (ähnlich wie Wordpress Update/Neuinstallation Prozess funktioniert) geladen wird:Wann gibt PHP die Seite nicht auf einmal aus?

<html> 
<body> 
<?php 
for($i=0; $i<100; $i++) 
{ 
    echo 'HELLO'; 
} 
sleep(10); 
echo '<p></p>'; 

for($i=0; $i<100; $i++) 
{ 
    echo 'THERE'; 
} 
sleep(10); 
echo '<p></p>'; 

for($i=0; $i<100; $i++) 
{ 
    echo 'HOW '; 
} 
sleep(10); 
echo '<p></p>'; 


for($i=0; $i<100; $i++) 
{ 
    echo 'ARE U'; 
} 
sleep(10); 
echo '<p></p>'; 

es Seltsamer wartet auf die gesamte Seite , dann zeigt es. Welche Variablen/Konfigurationen beeinflussen dieses Verhalten?

Antwort

6

Ich weiß nicht, wie Sie denken, php funktioniert, aber es ist nur Server-Seite und Sie erwarten teilweise Updates auf der Client-Seite. PHP funktioniert nicht so.

Wenn Sie dieses PHP-Skript aufrufen, beginnen PHP-Interpreter es auszuführen, die Ausgabe in einen temporären Speicherort, dann mit der Schlaf-Funktion, PHP-Interpreter wartet, bis Millisekunden erreicht sind, dann weiter ausführen, verketten die Ausgabe an der temporären Speicherort und weiter ... Nachdem die Ausführung des Skripts abgeschlossen ist, sendet php die gesamte Ausgabe an den Client.

Wenn Sie Teilupdates auf einer Seite benötigen, müssen Sie in die Welt der asynchronen Aufrufe und Ajax eintreten.

5

Es puffert die Ausgabe und sendet sie nur, wenn die Seite fertig geladen ist oder, afaik, nachdem einige Kilobyte gepuffert wurden. Sie können diese Funktionalität steuern, indem Sie entweder Ihren Code vollständig in ob_start() und ob_end_flush() einpacken oder in diesem Fall vor jedem Schlaf flush() aufrufen.

Weitere Informationen: What is output buffering?

1

PHP ist Server-Seite. Haben Sie das mit Javascript setTimeout() Funktion versucht?

Hier ist ein Beispiel für eine Zeichenfolge, die nach einer Verzögerung von 5 Sekunden 10 Mal wiederholt wird.

<script> 
setTimeout(test, 5000); 

function test(){ 
    for (var i=0;i<10;i++){ 
    document.write("test <br />"); 
    } 
} 
</script> 
+0

Das hängt nicht mit dem Problem zusammen, das ich versuche zu lösen, warum die gesamte Seite auf einmal ausgedruckt wird. – NoBugs

+0

php ist serverseitig, was bedeutet, dass es auf einmal an den Server gesendet wird, verarbeitet wird und dann das Ergebnis zurückgibt. Etwas Dynamisches zu tun wäre möglich mit Javascript. – Felix

+0

Mit einer Punktzahl von über 3000 glaube ich, dass OP versteht, was PHP ist. Sie lernen gerade die Macken, die 90% dieser Sprache ausmachen. – Anonymous

Verwandte Themen