Bilder von Server 1 verwenden falls Server 2 down

unwohltaeter

Mitglied
Hallo!

Um Traffic zu sparen, habe ich meine ganzen Bilder bzw. Grafiken extern auf "Server 2" gespeichert. Ist es per PHP irgendwie möglich herauszufinden ob ein Server ansprechbar ist und wenn nicht, Bilder dann von "Server 1" zu laden anstatt vom Nichtansprechbaren? Gibt es für solch eine Situation eine Art Ping-Funktion in PHP? Denn dann könnte ich das Ganze vermutlich sogar schon selbst mit if-Abfragen und Variablen lösen...

Gruß, unwohltaeter
 
Ob es eine bessere, schnellere oder elegantere Lösung gibt keine Ahnung:

PHP:
$server1 = "http://www.server1.de/";
$server2 = "http://www.server2.de/";
$dateiname = "bild.jpg";

IF (file_exists($server1 .$dateiname)) {
  echo "<img src='" .$server1 .$dateiname ."'>";
} else {
  echo "<img src='" .$server2 .$dateiname ."'>";
}

Gruß Thomas
 
Sorry, das was ich oben geschrieben habe funktioniert nicht weil mit der file_exists Funktion kein Zugriff auf Dateien auf einem "fremden" Server möglich ist.

Damit geht es aber:

PHP:
$server1 = "http://www.server1.de/"; 
$server2 = "http://www.server2.de/"; 
$dateiname = "bild.jpg"; 

$ok = @fopen($server1 .$dateiname,"r");
@fclose($ok);

IF ($ok) {
echo "<img src='" .$server1 .$dateiname ."'>";
} else {
echo "<img src='" .$server2 .$dateiname ."'>";
}
 
Sorry, das was ich oben geschrieben habe funktioniert nicht weil mit der file_exists Funktion kein Zugriff auf Dateien auf einem "fremden" Server möglich ist.

Damit geht es aber:

PHP:
$server1 = "http://www.server1.de/"; 
$server2 = "http://www.server2.de/"; 
$dateiname = "bild.jpg"; 

$ok = @fopen($server1 .$dateiname,"r");
@fclose($ok);

IF ($ok) {
echo "<img src='" .$server1 .$dateiname ."'>";
} else {
echo "<img src='" .$server2 .$dateiname ."'>";
}


Funktioniert so alles bestens. Aber gehts nicht einfacher?
Ich möchte den Code nämlich in 'ne PHP-generierte Stylesheet-Datei einbinden.
Wär es da nicht möglich, nur den Server zu checken und 'ne Variable entsprechend zu ändern falls einer offline wäre?
 
Habs zwar noch nie versucht, aber du könntest versuchen ob du mit fsockopen am HTTP-Port eine Verbindung zusammenkriegst.
 
Und genau dafür gibt es zigtausende Seiten darüber.

Syntax:
Code:
resource fsockopen  (  string $hostname  [,  int $port = -1  [,  int &$errno  [,  string &$errstr  [,  float $timeout = ini_get("default_socket_timeout")  ]]]] )

Beschreibung:
Code:
Initialisiert eine Socket-Verbindung zu der in hostname angegebenen Ressource.

PHP unterstützt Ziele im Internet und Unixdomänen, wie sie unter Liste der unterstützten Socket-Transporter beschrieben sind. Eine Liste unterstützter Transportarten können Sie auch mittels stream_get_transports() ermitteln.

Der Socket wird standardmäßig im Blocking Mode geöffnet. Sie können auf den Non-Blocking-Modus wechseln, indem Sie die Funktion stream_set_blocking() nutzen.

Parameter-Liste
Code:
hostname
Wenn Sie OpenSSL-Support mit einkompiliert haben, können Sie dem Parameter hostname entweder ein ssl:// oder ein tls:// voranstellen, um eine SSL- oder TLS-Verbindung aufzubauen, die via TCP/IP mit dem entfernten Server verbunden wird.

port
Die Portnummer.

errno
Sofern unterstützt, enthält der Parameter die Fehlernummer des Systemlevels, die beim Aufruf der connect()-Funktion auftrat.
Wenn der Rückgabewert von errno 0 ist und die Funktion FALSE zurückgibt, ist dies ein Zeichen, dass der Fehler vor dem connect()-Aufruf auftrat. Dies ist meist der Fall, wenn es ein Problem beim Initialisieren des Sockets gibt.

errstr
Die Fehlermeldung als String.

timeout
Der Connection-Timeout in Sekunden.

Hinweis: Wenn Sie einen Timeout für das Lesen oder Schreiben von Daten über den Socket setzen wollen, verwenden Sie stream_set_timeout(), da der timeout-Parameter von fsockopen() nur für das reine Konnektieren des Sockets gedacht ist.

Rückgabewerte
Code:
Die Funktion fsockopen() gibt einen Zeiger auf eine Datei zurück, der zusammen mit den anderen Dateifunktionen (wie fgets(), fgetss(), fwrite(), fclose() und feof()) verwendet werden kann. Wenn der Aufruf fehlschlägt, wird FALSE zurückgegeben.


Fehler/Exceptions
Code:
Wirft E_WARNING, wenn hostname keine gültige Domain ist.
 
Zurück