Warteschleife/Timeout
Grobi
- php
0 Götz0 Grobi
0 Tom0 Tom0 Andreas Korthaus
Ich beiss' mir die Zähne aus! Kann das denn so schwierig sein?
Ich habe im PHP-Code eine While-Schleife. Ich MUSS aber die
Ausführung verzögern. Pro Durchlauf zB 10 Sekunden.
Nun habe ich inzwischen rausgefunden, dass PHP das Script
zuerst komplett lädt, bevor es in HTML umgewandelt vom Server
an den Client geht. Na Bravo! Heißt das jetzt, dass man
generell keine Verzögerungen in eine While-Schleife (PHP)
reinkriegt?
Als Ansatz sehe ich JavaScript. Bringt (gemäß meinen oben
notierten Infos) aber auch nix! :-(
Hat hier schon jemand das gleiche Problem irgendwie gelöst?
Wäre sehr Dankbar über alle Tipps!
Danke Grobi
Hallo Grobi!
Ich habe im PHP-Code eine While-Schleife. Ich MUSS aber die
Ausführung verzögern. Pro Durchlauf zB 10 Sekunden.
Vielleicht ist ja http://de2.php.net/sleepwas für Dich.
MfG
Götz
Vielleicht ist ja http://de2.php.net/sleepwas für Dich.
Das mit sleep() habe ich auch schon versucht. Mit dem Ergebnis, dass ich einerseits einen Timeout erhalte (30sec) oder aber gar nichts geschieht, weil das Script ja als ganzes (somit verzögert) geladen wird!
Hello,
ich habe das hier schonmal ausführlich dargelegt und viele Andere (Raik, Dennis, etc.) haben geholfen, die Scripte zu testen. Es klappt unter Linux einwandfrei, unter Windiws nur bedingt.
Such mal unter "Jobs Hintergrund PHP author:Tom"
Zu bemerken wäre noch, dass man vor einem flush() keine Header manipuliert haben darf. dann klappt es auch bei Linux nicht mehr problemlos.
Warum das so ist, habe ich aber noch nicht näher untersucht.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
vielleicht hilft das: http://forum.de.selfhtml.org/archiv/2004/9/89706/#m537352
set_time_limit() kann man ggf. in einer .htaccess setzen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi!
Als Ansatz sehe ich JavaScript. Bringt (gemäß meinen oben
notierten Infos) aber auch nix! :-(
So wirklich kann ich den Infos nicht entnehmen was Du vorhast. Wenn Du z.B. alle 10 Sekunden eine neue Zeile an eine Tabelle anhängen willst, sollte das mit Javascript kein Problem sein.
Hat hier schon jemand das gleiche Problem irgendwie gelöst?
PHP ist nicht das geeignete Mittel für Dein Problem, denn Du hast ein Darstellungs-Problem auf der Client-Seite. Hierzu sollte man entsprechende Techniken verwenden, also z.B. HTML oder Javascript.
Was beim Aufruf eines PHP-Scriptes passiert ist hier beschrieben: http://php-faq.de/q/q-web-server-client.html
Das Problem an der Sache die Du vorhast ist, wenn das jetzt jeder so machen würde, angenommen auf Deinem Server liegen noch 1000 andere Kunden, weiter angenommen Deine Schleife dauert 2 Minuten, dann besteht zum einen 2 Minuten lang eine Verbindung zwischen dem Webserver und jedem Browser der das Script aufgerufen hat, der Webserver-Prozess ist von diesen 2 Minuten vielleicht 0,2 Sekunden beschäftigt, die restliche Zeit liegt er nur faul rum und wartet. Dann reichen schon recht wenige Leute die so ein Script im Browser aufrufen, um den gesamten Server mit 1000 Kunden lahmzulegen, denn der Webserver kann nicht unbegenzt neue Prozesse für neue Anfragen starten, sondern würde den Prozess lieber nach 0,2 Sekunden weiterverwenden, als nach 120.
Die ganzen Geschichten mit flush() funktionieren manchmal besser, manchmal schlechter, aber überleg mal was Du dann machst: Du lädst den Kopf einer Internetseite, überträgst ein paar Daten, und gehst davon aus dass sich jetzt jeder Browser der diese halbe Seite liest den Rest ungefähr zusammenreimen kann, und das alles ordentlich anzeigt. Das kann nicht wirklich verlässlich funktionieren. Möglicherweise wird Dir später eine kleine Änderung am Design alles zerhauen...
Ich würde Dir in diesem Fall zu Javascript raten.
Grüße
Andreas