Hallo zusammen,
nach einem halben Jahr in Hong Kong komme ich jetzt auch endlich wieder ins Entwicklerforum. War technisch wohl nicht zu lösen das Problem
Aber egal...wenn ihr mal auf airlinesim.de geht, dann seht ihr auf der Startseite diese "hübschen" Boxen, die mehr oder weniger den Status der einzelnen Server angeben. Diese Mimik ist derzeit recht simpel auf diese Weise gelöst:
if($xml = @simplexml_load_file($pfad_zur_datei)
{
// mach was mit $xml
// Server scheint up zu sein, "grünen Kasten" anzeigen
}
else
{
// Datei konnte nicht geladen werden, Server down?
// "roten Kasten" anzeigen
}
Das funktioniert ganz gut, so lange der Server läuft wie er soll...ist er aber mal down, hängt die ganze Seite, weil die Funktion zum Laden der XML kein Timeout kennt. Da meine PHP-Kenntnisse in den vergangenen Jahren extrem eingerostet sind frage ich euch: Wie würdet ihr das korrekt umsetzen?
Vielen Dank für eure Hilfe.
XML zwischen Servern per PHP lesen
gepostet vor 16 Jahre, 9 Monate von Lunikon
gepostet vor 16 Jahre, 9 Monate von TheUndeadable
3 Möglichkeiten:
a) Ich persönlich würde den zu überwachenden Server alle Minute ein Lebenszeichen an deinen Server raussenden lassen. Fehlt das Lebenszeichen => Tot!
b) Du führst diesen Request asynchron einmal die Minute aus und speicherst den Status in eine Datenbank. Dazu musst du aber asynchrone Aufrufe starten können.
c) Du zeigst die Seite mit einem Platzhalterbild an und lädst dann in einem Iframe oder per AJAX den Status des Servers nach und tauschst dann per JS das Bild aus. Allerdings muss der Nutzer dann 30(?) Sekunden warten, bis das Bild 'offline' angezeigt wird.
Ich favorisiere a oder b, je nachdem welchen Zugriff du auf die Server hast.
a) Ich persönlich würde den zu überwachenden Server alle Minute ein Lebenszeichen an deinen Server raussenden lassen. Fehlt das Lebenszeichen => Tot!
b) Du führst diesen Request asynchron einmal die Minute aus und speicherst den Status in eine Datenbank. Dazu musst du aber asynchrone Aufrufe starten können.
c) Du zeigst die Seite mit einem Platzhalterbild an und lädst dann in einem Iframe oder per AJAX den Status des Servers nach und tauschst dann per JS das Bild aus. Allerdings muss der Nutzer dann 30(?) Sekunden warten, bis das Bild 'offline' angezeigt wird.
Ich favorisiere a oder b, je nachdem welchen Zugriff du auf die Server hast.
gepostet vor 16 Jahre, 9 Monate von Nuky
Möglichkeit 4:
Du hast als Hintergrundbild "offline" und ladest vom entsprechenden Server das Bild "Online", das darüber positioniert ist.
Du hast als Hintergrundbild "offline" und ladest vom entsprechenden Server das Bild "Online", das darüber positioniert ist.
gepostet vor 16 Jahre, 9 Monate von Lunikon
Hm, alles schön und gut. Aber kennt PHP keine Funktionen die entsprechende Funktionen mit einem TimeOut erlauben? Weil dann wäre ja alles erledigt, wenn nach 2 Sekunden keine Response, dann vermutlich tot
gepostet vor 16 Jahre, 9 Monate von progs
Du könntest Auch einfach den Server anpingen (mittels shell_exec, etc.). Und beim ping-Befehl kannst Du dann natürlich einen Timeoutwert mit angeben.
gepostet vor 16 Jahre, 9 Monate von Dunedan
Ich denke deine Herangehensweise ist nicht die Beste. Was du momentan machst ist ja lediglich auf der Homepage anzuzeigen ob der Server online ist oder nicht. Besser wäre es doch aber wenn du als Admin (ich nehme mal an das bist du) immer weißt wann einer deiner Server down ist, ohne auf eine Homepage gucken zu müssen.
Und da lautet das passende Mittel, wie von Undead schon angedeutet: Heartbeat.
Als Abfallprodukt von Heartbeat kannst du dann auch die online/offline-Anzeige auf der Homepage machen ohne irgendwelche externen Server mitladen zu müssen.
Und da lautet das passende Mittel, wie von Undead schon angedeutet: Heartbeat.
Als Abfallprodukt von Heartbeat kannst du dann auch die online/offline-Anzeige auf der Homepage machen ohne irgendwelche externen Server mitladen zu müssen.
gepostet vor 16 Jahre, 9 Monate von HSINC
fsockopen kennt timeout, also darüber eine verbindung aufbauen und sich die xml datei holen. halte die methode aber auch eher für unsinnig. sinnvollere alternativmethodem wurden ja bereits genannt
gepostet vor 16 Jahre, 9 Monate von knalli
Lädst du in der Funktion eine interne Datei oder eine URL? Ersteres hat bool=file_exists(string), letzteres würde ich erst den String normal runterladen und dann parsen.
Und fopen kennt den Timeout doch..
Und fopen kennt den Timeout doch..