PHP - Backgroundprozesse / Intervalls, wie in JavaScript ? window.setTimeOut()
ceejay
- php
Meine Aufgabenstellung:
Eine .html-Seite (möglicherweise m. Frames) darstellen.
Diese .html-Seite (oder 1 innerhalb des Framesets) soll einen anderen Inhalt darstellen, erhalten, sobald ein "Moderator/Administrator" das so will. Also auf den Knopf drückt.
Mein Ansatz:
1.) mit PHP, da ich kein Java kann und Perl mir ungeeignet erscheint.
2.) eine configdatei in der der Name der neu anzuzeigenden Datei o.ä.
steht, diese wird dann auf "modified" oder veränderten Inhalt
überprüft, und sollte das der Fall (modified/changed) wird der
neue Inhalt dargestellt.
3.) dasselbe wie bei 2.) nur das die Daten nicht aus nem File sondern
von einem geöffneten Port auf einem Server abgefragt werden.
ähnlich Port 13 (MOTD ???)
4.) entweder wird eines der Frames mit dem neuen Inhalt befüllt.
(per document.locationdocument.writehttp-headerwasauchimmer)
Oder: alles besteht aus einer .html Seite, und geparsed, oder
per Object/Class - Aufruf, oder so - habe davon noch nicht genug
ahnung/erfahrung - ein object für die Ausgabe gibt es bereits,
dieses Objekt enthält den code der .html-seite und wird mit dem
Bildlink ("/pix/bild.jpg") aufgerufen ($pp = new PP("/pix/bild1.jpg"); $pp->Display(); // funktioniert erstmal)
5.) Socket-Connections - aber damit hab ich auch noch zu wenig
Erfahrung.
Mein Problem:
1.) der Überwachungsprozess, der entscheided, ob ein neues
Bild/Inhalt dargestellt werden soll, soll im Hintergrund laufen.
also ähnlich wie bei JavaScript window.setTimeout, oder
setInterval usw. , nur das ich das irgendwie nicht so schnalle
Meine erste Lösung war recht simpel:
$altedatei="";
function Loop() {
$zeit = time(); //aktuelle zeit in sek.
$sollzeit = $zeit + 5; //plus 5 sekunden = sollzeit
while( $sollzeit > $zeit ) {
$datei = join("", file("config.txt","r") );
$datei = chop($datei);
if($datei != $altedatei) {
$altedatei=$datei;
$pp = new Presentation("html-template.html",$datei);
$pp->Display();
$zeit = time(); //aktuelle zeit in sek.
}
flush();
sleep(1); // warte 1 sekunde
}
flush();
Loop();
}
Leider bringt mich das nicht weiter, da der Loop nicht im Hintergrund durchgeführt, sondern der Browser dabei die ganze Zeit hängt. Wenn man dabei mal davon absieht, das es sich hierbei um einen Endlosloop handelt. Ich würde lieber mit window.setInterval() oder window.settimeout() arbeiten, habe aber vergleichbares in PHP4 noch nicht finden können. Leider half flush() auch nichts, es wird dennoch nichts ausgegeben.
Wer kann helfen ?!
mfg
cee jay
Hi ceejay,
Meine Aufgabenstellung:
Eine .html-Seite (möglicherweise m. Frames) darstellen.
Diese .html-Seite (oder 1 innerhalb des Framesets) soll einen anderen Inhalt
darstellen, erhalten, sobald ein "Moderator/Administrator" das so
will. Also auf den Knopf drückt.
Das geht so ohne weiteres nicht. Du brauchst auf jeden Fall Unterstützung von
der Client Seite (also dem Browser).
Normalerweise fordert der Browser eine Seite an (zu dem Zeitpunkt läuft dann
für einige 10ms auch das phpScript, der Server schiebt sie dann ins Netz und
einige Sekunden später ist das ganze erledigt.
Dir bleibt also nix anderes übrig als den Browser regelmässig nachgucken zu
lassen ob was neues da ist.
Unter Mithife von JavaScript geht das sogar einigermassen vernünftig:
Mach einen (kleinen, leeren) Frame der sich selber reloaded (z.b. alle 30 sec).
Wenn der "Moderator den Knopf drückt" wird nicht mehr dieser (leer) Frame vom
Server geliefert, sondern einer, der ein JavaScript enthält, was eines der
Inhaltsframes neulädt.
Ohne JavaScript könntest du versuchen, auf die Reloads mit einem
'304 Not Modified' header zu reagieren, ich fürchte aber dass das nicht geht.
(Er wird einfach alle 30 sec das Bild neu aufbauen und das sieht sch**** aus.)
Gruss,
Carsten
Hi ceejay,
Meine Aufgabenstellung:
Eine .html-Seite (möglicherweise m. Frames) darstellen.
Diese .html-Seite (oder 1 innerhalb des Framesets) soll einen anderen Inhalt
darstellen, erhalten, sobald ein "Moderator/Administrator" das so
will. Also auf den Knopf drückt.Das geht so ohne weiteres nicht. Du brauchst auf jeden Fall Unterstützung von
der Client Seite (also dem Browser).
Normalerweise fordert der Browser eine Seite an (zu dem Zeitpunkt läuft dann
für einige 10ms auch das phpScript, der Server schiebt sie dann ins Netz und
einige Sekunden später ist das ganze erledigt.Dir bleibt also nix anderes übrig als den Browser regelmässig nachgucken zu
lassen ob was neues da ist.
Unter Mithife von JavaScript geht das sogar einigermassen vernünftig:
Mach einen (kleinen, leeren) Frame der sich selber reloaded (z.b. alle 30 sec).
Wenn der "Moderator den Knopf drückt" wird nicht mehr dieser (leer) Frame vom
Server geliefert, sondern einer, der ein JavaScript enthält, was eines der
Inhaltsframes neulädt.
Ohne JavaScript könntest du versuchen, auf die Reloads mit einem
'304 Not Modified' header zu reagieren, ich fürchte aber dass das nicht geht.
(Er wird einfach alle 30 sec das Bild neu aufbauen und das sieht sch**** aus.)Gruss,
»» Carsten
habe gestern noch ein bischen in den tut's gestöbert - hatte auch was zum background-processing gefunden, bezog sich aber eher auf execute() bzw. start() - also in dem Fall unbrauchbar -
die JavaScript variante ist die die ich zur Zeit eh fahre, bzw. sogar noch einfacher per META REFRESH - und die datei wird vom admin, per script mit neuer bilddatei befüllt - funktioniert ganz gut, nur wollt ich eben den störenden sekündlichen klick des IE unterdrücken, indem ich das ein wenig "schicker" gestalte .... nunja
die javascript / meta-tag variante würde ja so auch ausreichen, nur das freund admin unbedingt will, das die aktualisierung dann stattfinden, wann er es will, und GLEICHZEITIG bei allen ---- relativ machbar ist das nur, wenn das Intervall bei 1 Sekunde oder weniger liegt....das Klickgeräusch dazu ist schonmal ganz toll ;)=
jedoch habe ich noch eine weitere Methode, und die wirds dann wahrscheinlich werden: FLASH 4 !!!!
Wozu hat man Flash 4 ? einfach loopen lassen, dabei immer wieder ein config-file abfragen, wenn inhalt neuer als vorher, dann aufruf einer javascript-funktion, die den rest erledigt ....
dadurch das flash loopen kann, ohne das der browser klickert geht das ganz gut,
außerdem kann ich da ein NewsTickerflash einfach erweitern und schon macht es zusätzlich auch noch die steuerung des refresh ;)
trotzdem danke Carsten -
vielleicht fällt Dir ja nochwas dazu ein ?
cYa
cee jay