[PHP] Seitenreload

Retep

Well-known member
ID: 102024
L
29 April 2006
378
4
Hiermit

Header("Refresh: 10;URL=bla.php");

lasse ich die Seite "bla.php" alle 10 Sekunden neu laden. Dies findet nur für einen bestimmten Besucher X der Seite statt (in Abhängigkeit der Daten des Users in der DB). Wenn nun in der Datenbank etwas passiert (ich nenne es mal Ereignis Y), soll das Reloaden bei User X aufhören.

Bei User X wird also solange alle 10 Sekunden die Seite neu geladen, bis Y eintritt. Wäre es auch irgendwie möglich, dass garnicht automatisch alle 10 Sekunden reloaded wird, sondern erst exakt *nachdem* die Datenbankänderung Y eingetreten ist?

Vielen Dank im Voraus..
 
Zuletzt bearbeitet:
Du könntest einen AJAX-Request nutzen um nur nach Wert Y zu schauen.
Stellt sich dabei heraus, dass Wert Y sich geändert hat, dann führst du den Reload durch.
Dann musst du nicht die gesamte immer wieder neu laden.
 
.

Du könntest einen AJAX-Request nutzen um nur nach Wert Y zu schauen.
Stellt sich dabei heraus, dass Wert Y sich geändert hat, dann führst du den Reload durch.
Dann musst du nicht die gesamte immer wieder neu laden.

Ich habe mich erkundigt, dazu muss man JavaScript beherrschen? (das müsste ich noch lernen) Mit etwas einfacherem bzw. nur mit PHP bekommt man das wahrscheinlich nicht hin?
 
.

Was ich im Grunde nur brauche ist so etwas

Lese $Y aus Datenbank;
if ($Y==0) tue nichts;
if ($Y==1) Lade die URL "bla.php" neu;

Muss ich dafür wirklich Javascript lernen?
 
Muss ich dafür wirklich Javascript lernen?
Im Grunde genommen: ja.

So kompliziert, wie du vielleicht glaubst, ist JavaScript aber gar nicht, wenn man bereits eine andere, vergleichbare, Sprache beherrscht.
In der Syntax gibt es im Wesentlichen nur geringe Unterschiede.

Das, was du wirklich lernen musst, sind halt zum Beispiel die vorgegebenen Funktionen oder die Umgebungsvariablen - aber die hat man relativ schnell raus.

Und ganz ehrlich: JavaScript zu können kann im Bereich der Webprogrammierung nie schaden ... ;)
 
.

Habe mir eine andere Lösung überlegt, welche nur mit PHP auskommt:

Ich lasse "bla.php" in einer Endlosschleife laufen, wobei der Teil, welcher die DB-Abfrage macht, IMMER aufgerufen wird und alles was dem Anzeigen der Seite entspricht, nur im Fall der DB-Änderung. So müsste sich nur bei der Änderung die Seite sichtbar neu laden.. natürliche baue ich in die Endlosschleife eine Sleep-Funktion ein, damit sie nicht so teuer wird.

Kommentare dazu sind willkommen. ;)
 
In deinem Fall läuft die ganze Zeit ein Thread für jeden Besucher deiner Seite, dass ist IMHO sehr Rechenintensiv für den Server. Soweit ich weiß, dürftest du auch auf Probleme treffen, da nicht bekannt ist, ob der Browser überhaupt noch geöffnet ist, und das Programm dann eigentlich für "immer" läuft.

Die AJAX-Methode scheint mir deutlich sinnvoller.
 
Da wirst du ein Problem mit einigen Browsern bekommen.
Beispiel Internet Explorer:
Sobald du im Content eine While/For schleife anwendest, wird der Footer berreich (alles was nach der while schleife kommt) nicht mehr geladen.
Bzw. erst wenn die Schleife vorbei ist und da diese unendlich ist, wird der berreich garnicht geladen.
 
.

In deinem Fall läuft die ganze Zeit ein Thread für jeden Besucher deiner Seite, dass ist IMHO sehr Rechenintensiv für den Server. Soweit ich weiß, dürftest du auch auf Probleme treffen, da nicht bekannt ist, ob der Browser überhaupt noch geöffnet ist, und das Programm dann eigentlich für "immer" läuft.

Die AJAX-Methode scheint mir deutlich sinnvoller.

Es gibt gewisse Abbruchbedingungen (zeitabhängig) bei meiner Anwendung.
Bei der AJAX-Methode müsste doch aber auch irgendetwas ständig laufen?

Dennoch gebe ich zu, dass diese Lösung nicht gerade einen Schönheitspreis gewinnt ;)
 
Da wirst du ein Problem mit einigen Browsern bekommen.
Beispiel Internet Explorer:
Sobald du im Content eine While/For schleife anwendest, wird der Footer berreich (alles was nach der while schleife kommt) nicht mehr geladen.
Bzw. erst wenn die Schleife vorbei ist und da diese unendlich ist, wird der berreich garnicht geladen.

:LOL: Und wie darf man sich das bei anderen Browsern vorstellen? Bis jetzt kenn ich kein Browser der eine USB-Glaskugel unterstützt, also werden es alle Browser schwer haben den "Footer" darzustellen bevor sie ihn vom Server bekommen.

@Retep nein bei der Ajax Variante müsste nicht ständig etwas laufen. Das mit Ajax ist nix anderes als ein Polling... da wird alle x Sekunden der Server gefragt ob's was neues gibt.
 
Ich lasse "bla.php" in einer Endlosschleife laufen, wobei der Teil, welcher die DB-Abfrage macht, IMMER aufgerufen wird und alles was dem Anzeigen der Seite entspricht, nur im Fall der DB-Änderung. So müsste sich nur bei der Änderung die Seite sichtbar neu laden.. natürliche baue ich in die Endlosschleife eine Sleep-Funktion ein, damit sie nicht so teuer wird.

Für gewöhnlich bricht der Webserver ein Script ab, was länger als <x> Sekunden läuft. Das ist so gewollt, damit ein Script was ausversehen in 'ner Endlosschleife landet nicht irgendwann den Webserver total zufährt. Man kann <x> zwar einstellen, wenn man Zugriff auf die PHP.INI hat, aber ob man es beliebig erhöhen kann, das weiß ich nicht. In jedem Fall eine arge Vergewaltigung des Prinzips "Webserver".

Mach's lieber AJAX-artig, da hast Du auf lange Sicht mehr davon.
 
Man kann <x> zwar einstellen, wenn man Zugriff auf die PHP.INI hat, aber ob man es beliebig erhöhen kann, das weiß ich nicht.

Wo in der PHP.ini bzw. unter welchem Begriff steht das denn?

Edit: Die Vergewaltigung hält sich noch in Grenzen, wenn das Script 0,001 Sekunden läuft und danach 1 Sekunde Pause spendiert bekommt ---> Nur 0,1% Auslastung.
 
Im Script kannst du soweit vom Provider nicht deaktiviert (fast bei allen) die Restlaufzeit des Scipts mit set_time_limit(sekunden) immer wieder verlängern.

Aber wie gesagt Vorsicht, stell dir vor es sind einige Besucher gleichzeitig auf deiner Seite. Ich empfehle nochmals dringend, an AJAX zu denken, dass ist definitiv angebracht.
Wenn du doch das Endlosscript einsetzen willst, dann schone Ressourcen damit du nicht an die Grenzen des Arbeitsspeichers kommst.