PHP Pause (nicht sleep () )

Überkinger

Lieutenant
Registriert
Juli 2010
Beiträge
600
hallo,

Hallo,
Welt,

Wie bringe ich PHP dazu, das zwischen der Ausgabe Hallo und Welt eine Wartezeit eingefügt wird.

echo "Hallo";
sleep (2);
echo "Welt";

ist es nicht.
 
Sollte aber stimmen soweit ich weiß. Auch wenn ich den Sinn nicht seh wozu man je sleep brauchen wird ^^
 
soweit ich weiß ist der parameter für sleep immer in milisekunden angegeben.
wenn das script 2sek stoppen soll müsste der befehl also sleep(2000) heißen.

MfG
Damon

edit: ok diverse posts machen diesen hier überflüssig :P
 
Sleep() in PHP macht keinen Sinn, da die Daten erst an den Client gesendet werden, sobald das ganze Skript abgearbeitet ist.

Bessere Möglichkeit wäre, alle paar Sekunden mit Hilfe von JavaScript (AJAX) ein PHP-Skript abzurufen, dass die aktuellen Meldungen zurückgibt.

MfG
lizard99
 
lizard99 schrieb:
Sleep() in PHP macht keinen Sinn, da die Daten erst an den Client gesendet werden, sobald das ganze Skript abgearbeitet ist.

Danke. Das war der richtige Hinweis dafür, dass ich auf dem Holzweg war.
 
Doch das sollte gehen, denk nur an das script-time-limit. Probier's mal aus:

PHP:
ob_implicit_flush(true);
ob_end_flush();

echo "Hallo";

@ob_flush();
sleep (3000);

echo "Welt";

Kann sein daß das bei der ersten verzögerten output, noch nix angezeigt wird. Dann einfach weitere Anweisungen ausführen lassen. Hängt auch stark vom Browser ab.
 
lizard99 schrieb:
Sleep() in PHP macht keinen Sinn, da die Daten erst an den Client gesendet werden, sobald das ganze Skript abgearbeitet ist.

stimmt nicht. Du kannst auch mit ob_flush() direkt während der Laufzeit Daten an den Browser senden, wenn der Inhalt noch nicht fertig ist. Allerdings ist es Sache des Browsers, wie er dies behandelt: FF gibt die Daten sofort aus, Chrome sammelt die Daten selbst nochmal um sie in größeren Stücken auszugeben usw.

In der Theorie funktioniert es, in der Praxis ist extrem browserabhängig.
 
Thyron schrieb:
Doch das sollte gehen, denk nur an das script-time-limit.
Kann sein daß das bei der ersten verzögerten output, noch nix angezeigt wird. Dann einfach weitere Anweisungen ausführen lassen. Hängt auch stark vom Browser ab.


IE und FF machen es nicht, sondern zeigen nur den gesamten Output am Ende an. Die Lösung scheidet also leider aus.
 
Also PHP ist dafür wirklich ungeeignet...
Mit ein bisschen JavaScript lässt sich das bestimmt ganz einfach machen.

Ansonsten:
Gib Hallo aus und in einem Frame direkt darunter öffnest du eine andere Seite.
Diese andere Seite hat nen meta refresh, der nach 2 Sekunden auf ne andere Seite leitet. Und dort steht dann "Welt"^^
Absolut unschön aber das geht sicher :)

Für was braucht man das warten denn überhaupt? PHP ist für solche Zwecke (da es wie schon oben angesprochen läuft, bevor irgendwelche Daten zum Client kommen) total ungeeignet.
Wundert mich aber das das tatsächlich Browserabhängig ist. Wäre davon ausgegangen, dass der Webserver einfach so lange wartet bis er dem Client die Seite gibt.
 
Die Lösung scheidet also leider aus.
Eher nicht. Wie mehrfach gesagt ist das Verhalten der Ausgabe abhängig vom Browser. Was sich PHP oder der Webserver wünscht ist dabei leider irrelevant. Dass das Beispiel funktioniert sie man ggf. schon daran, das man innerhalb des sleeps das laden der Seite abbricht. Dann wird nur "Hallo" angezeigt.

Das IFrame Beispiel ist schon ein bischen überzogen <.< aber der Gedanke schon richtig. Eine verzögerte Ausgabe bzw. Anzeige würde ich eher mit Ajax lösen. Bspw. wäre das $.get() oder $.post() von jQuery möglich, das mittels setInterval() wiederholt aufgerufen wird. Da dies aber schnell komplexe Züge annimmt, hilft es, sich thematisch damit auseinderzusetzen. Eine "machs so"-Lösung gibs da nicht.
 
Kokuswolf@Work schrieb:
Eher nicht. Wie mehrfach gesagt ist das Verhalten der Ausgabe abhängig vom Browser. Was sich PHP oder der Webserver wünscht ist dabei leider irrelevant. Dass das Beispiel funktioniert sie man ggf. schon daran, das man innerhalb des sleeps das laden der Seite abbricht. Dann wird nur "Hallo" angezeigt.

Das IFrame Beispiel ist schon ein bischen überzogen <.< aber der Gedanke schon richtig. Eine verzögerte Ausgabe bzw. Anzeige würde ich eher mit Ajax lösen. Bspw. wäre das $.get() oder $.post() von jQuery möglich, das mittels setInterval() wiederholt aufgerufen wird. Da dies aber schnell komplexe Züge annimmt, hilft es, sich thematisch damit auseinderzusetzen. Eine "machs so"-Lösung gibs da nicht.

Ich verfolge nun einen anderen Ansatz. Mein Ziel wäre es gewesen, den Prozess eines Scripts, das via Web ausgeführt wird, mitverfolgen. Ich speichere nun alle Ergebnisse und schreibe es in ein Logfile, das ich mir via Mail zuschicken lasse.
 
Zurück
Oben