Wenn Nas online -> umleiten

Status
Für weitere Antworten geschlossen.

rauppe31

Benutzer
Mitglied seit
06. Jun 2011
Beiträge
2.734
Punkte für Reaktionen
0
Punkte
82
Hallo wiedereinmal

Ich möchte, dass meine .ch Adresse auf meiner DS 107e läuft, was ich auch geschafft habe.
Dafür benutze ich diesen Code
index.html
Rich (BBCode):
<FRAMESET ROWS="100%,*" FRAMEBORDER="0" BORDER="0" FRAMESPACING="0">
*<FRAME NAME="top" SRC="http://naefmarco.no-ip.org/naefmarco.ch" FRAMEBORDER="0" BORDER="0" >
*<FRAME NAME="bottom" SRC="leer.html" FRAMEBORDER="0" BORDER="0" >
</FRAMESET>

Ich möchte, dass mein Server (nicht die DS) vor der Umleitung überprüft, ob mein Nas online ist.
Wenn das Nas online ist, soll er den User auf das Nas umleiten.
Wenn das Nas offline ist, soll er eine Fehlermeldung anzeigen. Z.B.: Die Webseite ist zurzeit nicht verfügbar. Bitte versuchen sie es später nochmals.


Vielen Dank für eure Hilfe.
 

Stabmaster

Benutzer
Mitglied seit
04. Sep 2011
Beiträge
169
Punkte für Reaktionen
0
Punkte
0
Hast du die Möglichkeit, php am Server auszuführen?
Wenn ja, kannst du prüfen ob du eine Antwort von deinem Gerät bekommst und dann weiterleiten.
Ansonsten blendest du deine Antwort ein und leitest nicht weiter.

Ggf. kann man dies auch schon mittels JavaScript prüfen, aber dazu kann ich gerade nichts sagen.
 

rauppe31

Benutzer
Mitglied seit
06. Jun 2011
Beiträge
2.734
Punkte für Reaktionen
0
Punkte
82
Ja, php wird unterstützt. Wie würde denn der Code dafür heissen?
 

Stabmaster

Benutzer
Mitglied seit
04. Sep 2011
Beiträge
169
Punkte für Reaktionen
0
Punkte
0
Schau dir das Beispiel der folgenden Seite an, dass dürfte genau das was du brauchst!
http://de.php.net/fsockopen

Statt die Ausgabe im else-Bereich, machst du ein header-location wie folgt:

header('Location: http://www.example.com/');

Das dürfte es gewesen sein!
Viel Spaß ;-)
 

Breitkrug

Benutzer
Mitglied seit
09. Mrz 2011
Beiträge
149
Punkte für Reaktionen
0
Punkte
0
Hatte Lust dazu :) ...
PHP:
<?php 

$nas_url = 'http://naefmarco.no-ip.org/naefmarco.ch'; 

$response = @get_headers($nas_url); 

if (is_array($response) == true) // $response liefert ein Array, wenn vorh.
{ 
 	/* Adresse ist erreichbar --> Weiterleitung zu $nas_url */
 	header("Location: ".$nas_url."");
}
else
{
  /* Adresse nicht erreichbar --> Fehlermeldung hier über html-Block*/
  	echo <<<html_block
	<h3 style="text-align:center">Adresse $nas_url ist zur Zeit nicht erreichbar. Bitte versuchen Sie es später noch einmal.</h3>
	<hr size="1" width="80%">
	<p>© 2011, Mister X</p>
html_block;
}

?>

Die Adresse habe ich aus deinem ersten Post entnommen!
 

Stabmaster

Benutzer
Mitglied seit
04. Sep 2011
Beiträge
169
Punkte für Reaktionen
0
Punkte
0
Wenn du schon die Header abfragst, solltest du auch den ersten Wert des Arrays von $response auswerten. Die Seite kann bspw. einen anderen HTTP-Code als 200 zurück liefern. M.E wird in deinem Beispiel ständig auf die Webseite der NAS geleitet ;-)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
PHP:
header("Location: ".$nas_url."");
wieso noch einen leeren String hintendran? Noch ein Tipp: Nach header(Location) immer ein exit machen. Sonst kann die Weiterleitung scheitern, wenn noch Code folgt (ist bei dir zwar nicht der Fall, aber wenn man sich es angewöhnt erspart man sich einiges)
 

rauppe31

Benutzer
Mitglied seit
06. Jun 2011
Beiträge
2.734
Punkte für Reaktionen
0
Punkte
82
Vielen Dank für eure Hilfe. Ich werde beides mal anschauen.
 

Breitkrug

Benutzer
Mitglied seit
09. Mrz 2011
Beiträge
149
Punkte für Reaktionen
0
Punkte
0
Wenn du schon die Header abfragst, solltest du auch den ersten Wert des Arrays von $response auswerten. Die Seite kann bspw. einen anderen HTTP-Code als 200 zurück liefern. M.E wird in deinem Beispiel ständig auf die Webseite der NAS geleitet ;-)
Du hast recht. Ich hatte bei meinen Testversuchen mit Pseudo ip-Adressen gespielt und da kam als Rückgabe kein Array zurück. Allerdings wundert mich, dass beim Header-Check seiner Seite ständig ein „301 Moved Permanently“ ausgegeben wird, obwohl seine Seite erreichbar ist. Hier fällt mir ehrlich gesagt keine Lösung unter php ein.

PHP:
header("Location: ".$nas_url."");
wieso noch einen leeren String hintendran?
Zuviel des Guten :eek:

Hier noch mal der geänderte Code, der aber bei der Seite von rauppe31 nicht funktioniert (Stichwort 301, siehe oben), jedoch bei anderen Seiten (auch auf z.B. DynDNS-Seiten) erfolgreich klappt.
PHP:
<?php 

$nas_url = 'http://naefmarco.no-ip.org/naefmarco.ch'; 
$response = get_headers($nas_url); 
$str = $response[0];

//print_r ($str); // prüfen der Rückgabe

 if(strpos($str,"200")!==false) 
{ 
 	// Adresse ist erreichbar --> Weiterleitung zu $nas_url 
 	header("Location: ".$nas_url);
 	exit;
}
else {
  // Adresse nicht erreichbar --> Fehlermeldung hier über html-Block
  	echo <<<html_block
  	<p> </p>
	<h3 style="text-align:center">Adresse $nas_url ist zur Zeit nicht erreichbar. Bitte versuchen Sie es später noch einmal.</h3>
	<hr size="1" width="80%">
html_block;
}

?>
Eine vielleicht nicht ganz so elegante Lösung habe ich mit Html und Javascript dann doch noch gefunden...

Hierbei nutze ich einfach die Event-Handler onError und onLoad für den img-Tag. D.h., ich suche einfach ein Bild auf seinem NAS-Server, wird es gefunden, dann erfolgt eine Weiterleitung zur HP auf der NAS. Sollte das Bild nicht gefunden werden, könnte das ein Indiz sein, dass sein NAS-Server offline ist und gebe dann einfach unter onError einen Text aus. Für eine schönere Html-Nicht gefunden-Seite könnte man auch hier eine Weiterleitung zu eine Html-Seite auf dem anderen Server ablegen und aufrufen.
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
  <meta http-equiv="cache-control" content="no-cache">
  <title>Prüfen des NAS-Servers auf Erreichbarkeit</title>
</head>
<body>
<img src="http://naefmarco.no-ip.org/naefmarco.ch/header/cooltext516237719.png"
	 width="1px"
	 height="1px"
         alt="" 
         onLoad="document.location='http://naefmarco.no-ip.org/naefmarco.ch';"
         onError="document.write('<b><i>Adresse ist zur Zeit nicht erreichbar. Bitte versuchen Sie es später noch einmal.</i></b>');"
>
</body>
</html>
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Hi Breitkrug,

testest du auch immer mit verschiedenen Browsern. Soweit ich mich erinnern kann, sind onLoad und onError nur beim IE so vorhanden ...

Itari
 

rauppe31

Benutzer
Mitglied seit
06. Jun 2011
Beiträge
2.734
Punkte für Reaktionen
0
Punkte
82
Bei mir hat es mit dem Javascript nicht funktioniert. Habe es vom Firefox getestet. Es kam immer, dass die Webseite nicht erreichbar sei, obwohl mein Nas online war.

Eigentlich möchte ich, dass wenn mein Nas offline ist, z.b. fehler.html auf dem externen Server geladen wird.
 

Breitkrug

Benutzer
Mitglied seit
09. Mrz 2011
Beiträge
149
Punkte für Reaktionen
0
Punkte
0
Tja, dann weiss ich keinen Rat mehr :eek:
Die Html-Variante habe ich selbst bei mir auf dem externen Server abgelegt und es funktioniert. Getestet habe ich das wie folgt:
  • Mac: Google Chrome, Safari
  • Windows 7: ie9, Firefox 7
  • Windows 8 (Beta): ie
  • Android Tablett PC: Dolphin-Browser

Was habe ich gemacht:
Auf der Diskstation im Ordner web ein 1*1 Pixel große Gif-Datei abgelegt, Dateiname CheckImg.gif. Auf dem externen Server (hat kein PHP) eine index.html erzeugt mit der Html onError/onLoad Geschichte. Verweis auf die Bilddatei CheckImg.gif. Zusätzlich habe ich noch eine offline.html erstellt, die auch auf dem externen Server liegt. Diese wird im onError-Handler aufgerufen.
Der Test erfolgte einmal durch Dateinamensänderung der CheckImg.gif und durch ein abschalten der Diskstation selbst. Beides klappte.

Die Eventhandler onErrror und onLoad sollten bei jedem gängigen Browser funktionieren. Etwas gegenteiliges, dass es nur im ie funktioniert konnte ich nicht feststellen und selbst in meiner JS-Bibel ("Das JavaScript Codebook" vom Addison-Wesley Verlag) erklärt die Eventhandler ohne Hinweis darauf, dass es nur in bestimmten Browsern funktionieren soll.

Ach ja, da bestimmt die Frage aufkommt wegen abgeschaltetem JS:
Im Html-Code habe ich nach dem img-Tag ein noscript-Tag eingebaut. Mir ist klar, dass dann bei abgeschalteter Diskstation meine offline.html nicht ausgeführt werden kann...ok, ist dann halt so!
HTML:
<noscript>Sie haben JavasSript deaktiviert. Bitte klicken Sie auf den untenstehenden Link um eine manuelle Weiterleitung zu initiieren.<br>
  <a href="http://domain.tld">Fotogalerie</a>
</noscript>
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat 

 
 
  AdBlocker gefunden!

Du bist nicht hier, um Support für Adblocker zu erhalten. Dein Adblocker funktioniert bereits ;-)

Klar machen Adblocker einen guten Job, aber sie blockieren auch nützliche Funktionen.

Das Forum wird mit hohem technischen, zeitlichen und finanziellen Aufwand kostenfrei zur Verfügung gestellt. Wir zeigen keine offensive Werbung und bemühen uns um eine dezente Integration.

Bitte unterstütze dieses Forum, in dem du deinen Adblocker für diese Seite deaktivierst.

Du kannst uns auch über unseren Kaffeautomat einen Kaffe ausgeben oder ein PUR Abo abschließen und das Forum so werbefrei nutzen.

Vielen Dank für Deine Unterstützung!