Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Anzeige ob Server Online oder Offline ist
Frage
Ich möchte verschiedene Bildarchive meiner Homepage auf einem anderen Server (kostenlosem Webhoster) ablegen.
Da einige oft nicht verfügbar sind möchte ich dem User gleich auf der linkpage zu dem jeweiligen Bilderarchiv anzeigen ob die Bilder momentan verfügbar sind (Server online) oder nicht (Server offline). Es soll per Text angezeigt werden nicht als Bild.
Oft ist sowas auf War*ez Seiten zu sehen. Jedoch wie´s funktioniert keine Ahnung.
Für ein fertiges Script wäre ich sehr dankbar.
Mein Webspace unterstützt auch PHP, falls es nur damit geht.
Vielen Dank
Antwort 1 von MusicCreator
Hi,
Du meinst sowas wie ein Status-Indikator?
Der Server mit den Bildern müsste dem anderen Server immer "bescheid" sagen,ob er verfügbar ist oder nicht. Mir ist - solange du nicht Besitzer und Betreiber des Servers mit Root-Rechten bist - keine Lösung bekannt, wie du das machen könntest. Es ist vergleichbar mit DynDNS, da muss man seine IP auch updaten und dem Server seinen Status mitteilen. Ich glaube nicht, dass du ohne weiteres etwas machen kannst als Kunde bei einem Provider.
Gruß,
Jens
Du meinst sowas wie ein Status-Indikator?
Der Server mit den Bildern müsste dem anderen Server immer "bescheid" sagen,ob er verfügbar ist oder nicht. Mir ist - solange du nicht Besitzer und Betreiber des Servers mit Root-Rechten bist - keine Lösung bekannt, wie du das machen könntest. Es ist vergleichbar mit DynDNS, da muss man seine IP auch updaten und dem Server seinen Status mitteilen. Ich glaube nicht, dass du ohne weiteres etwas machen kannst als Kunde bei einem Provider.
Gruß,
Jens
Antwort 2 von SchmChris
Eine Antwort von Undertaker - Antwort 94
Supportnet Beitrag
Hi MixMax,
> tja wie testet man nun die funktion onerror=
Eine retorische Frage?
Teste übrigends mit meinem FTP-Server...
Also, onerror= und onload= werden von Opera anders interpretiert als vom IE. Aus Gründen der Kompatibilität möchte ich daher von der Benutzung absehen.
Ich denke auch, das ein Delay von 1-2 Sekunden für entsprechend kleine Bilder ausreichen dürften und selbst einen DSL User dürfte diese Zeitspanne nur geringfügig bremsen.
Naja, das mit der Standardseite und weiterführenden Link ist so ein Problem. Der oben gepostete Code war ja für diese Form der Benutzung gedacht. Nur ist es so das es User gibt, die die Anzeige gerne auf der Startseite ihrer Homepage haben wollen und dann den gesamten Code über Tools wie GoLive, Frontpage usw. irgendwo einbauen; Wohlgemerkt mit allen Tags (<html><head><body>)...
Deshalb werde ich mich wohl doch hinsetzen und einen Code-Generator in HTML schreiben...
Aber bis der fertig ist, poste ich nochmal die beiden Codes für WEB- bzw. FTP-Server:
WEB-Server:
FTP-Server:
Hab ich mal weggelassen
Eine Idee, wie die beiden Bilder aussehen könnten kann man sich z.B.
hier anschauen...
Gruß
Undertaker
Ende Zitat
Christian
Aber wie schreib ich das nun für meine bedürfnisse um ?
Supportnet Beitrag
Hi MixMax,
> tja wie testet man nun die funktion onerror=
Eine retorische Frage?
Teste übrigends mit meinem FTP-Server...
Also, onerror= und onload= werden von Opera anders interpretiert als vom IE. Aus Gründen der Kompatibilität möchte ich daher von der Benutzung absehen.
Ich denke auch, das ein Delay von 1-2 Sekunden für entsprechend kleine Bilder ausreichen dürften und selbst einen DSL User dürfte diese Zeitspanne nur geringfügig bremsen.
Naja, das mit der Standardseite und weiterführenden Link ist so ein Problem. Der oben gepostete Code war ja für diese Form der Benutzung gedacht. Nur ist es so das es User gibt, die die Anzeige gerne auf der Startseite ihrer Homepage haben wollen und dann den gesamten Code über Tools wie GoLive, Frontpage usw. irgendwo einbauen; Wohlgemerkt mit allen Tags (<html><head><body>)...
Deshalb werde ich mich wohl doch hinsetzen und einen Code-Generator in HTML schreiben...
Aber bis der fertig ist, poste ich nochmal die beiden Codes für WEB- bzw. FTP-Server:
WEB-Server:
<html>
<head>
<META HTTP-EQUIV=Content-Type CONTENT=text/html; charset=iso-8859-1>
<META HTTP-EQUIV=Content-Language CONTENT=de>
<META NAME=robots CONTENT=NOINDEX,NOFOLLOW>
<META NAME=GENERATOR CONTENT=AutoDialUp>
<title>Dynamische IP</title>
<script language="JavaScript">
<!--
function check()
{
if(document.getElementsByName("onlinemeldung")[0].complete == false) {
document.getElementsByName("onlinemeldung")[0].src='offline.gif';
} else {
location.replace("http://#CIP#/");
}
}
-->
</script>
</head>
<body bgcolor=#00659C>
<center> Der Server ist:
<img src="http://#CIP#/online.gif" width=45 height=13 border=0 name="onlinemeldung">
<script language="JavaScript">window.setTimeout("check()",2000);</script>
</center>
</body>
</html>
FTP-Server:
Hab ich mal weggelassen
Eine Idee, wie die beiden Bilder aussehen könnten kann man sich z.B.
hier anschauen...
Gruß
Undertaker
Ende Zitat
Christian
Aber wie schreib ich das nun für meine bedürfnisse um ?
Antwort 3 von semi
<?php
//$img_up = "up.gif";
//$img_down = "down.gif";
//$url = $_GET['url'];
$max_redir = 5; // Max. Tiefe bei Umleitung
function checkURL($aurl) {
$statuscode = 404;
$urlarr = parse_url($aurl);
if(isset($urlarr["host"])) {
$host = $urlarr["host"];
$port = isset($urlarr["port"]) ? $urlarr["port"] : 80;
$fp = fsockopen($host, $port, &$errno, &$errstr, 5);
if($fp) {
$path = isset($urlarr["path"]) ? $urlarr["path"] : "/";
$query = isset($urlarr["query"]) ? "?".$urlarr["query"] : "";
$head = "HEAD " . $path . $query . " HTTP/1.0\r\n\r\n";
fputs ($fp, $head);
$statusline = "";
do {
$statusline = $statusline . fgets($fp, 128);
preg_match("/^HTTP\/\d+\.\d+\s+(\d+)/", $statusline, $matches);
$statuscode = $matches[1];
$headers = "";
while(!feof($fp)) {
$temp = fgets($fp, 1024);
if(preg_match("/^\015?\012/", $temp)) break;
$headers = $headers . $temp;
}
preg_replace("/\015?\012[ \t]+/", " ", $headers);
if($statuscode==100) {
$statusline = "";
}
} while($statuscode == 100);
fclose($fp);
if(preg_match("/^(301|302|303)$/", $statuscode)) {
preg_match("/^location:[ \t]*(\S*)/im", $headers, $matches);
if(isset($matches[1])) {
return array("status"=>$statuscode, "location"=>$matches[1]);
}
}
} // if($fp)
} // if(isset(...
return ($statuscode==200)?array("status"=>200):array("status"=>404);
}
$redircount=0;
while($redircount<$max_redir) {
$response = checkURL($url);
$status = $response["status"];
if($status==200) {
//header ("Location: $img_up");
echo "OK";
exit;
}
else if($status==404) {
//header ("Location: $img_down");
echo "Not found or down";
exit;
}
$url = $response["location"];
$redircount++;
//echo "Redirection $redircount, URL: $url<br>";
}
echo "Too many redirections (>$max_redir)";
//header ("Location: $img_down");
?>Verwendung:
urlcheck.php?url=http://www.o-auch-immer.de/abc.zip
Antwort 4 von SchmChris
Kann man das irgendwie auch mit dem include befehl umsetzen ?
Geht leider nicht das bringt er
Warning: open_basedir restriction in effect. File is in wrong directory
und
Warning: Failed opening 'seiten/check.php?url=http://www.domain.de/schmchris/bilder/0001/status.txt' for inclusion (include_path='.:/usr/local/lib/php') in /home/www/...
Kannst du mir weiterhelfen Semi ?
<?php
include("seiten/check.php?url=http://www.domain.de/schmchris/bilder/0001/status.txt");
?>
Geht leider nicht das bringt er
Warning: open_basedir restriction in effect. File is in wrong directory
und
Warning: Failed opening 'seiten/check.php?url=http://www.domain.de/schmchris/bilder/0001/status.txt' for inclusion (include_path='.:/usr/local/lib/php') in /home/www/...
Kannst du mir weiterhelfen Semi ?
Antwort 5 von semi
Mach es mit der vollständigen Adresse
include("http://www.abc.com/check.php?url=http://www..../status.txt");
Gruß,
Michael
include("http://www.abc.com/check.php?url=http://www..../status.txt");
Gruß,
Michael
Antwort 6 von semi
Oder noch besser, wenn du die zu prüfende Adresse korrekt codierst
http%3A%2F%2Fwww.domain.de%2Fschmchris%2Fbilder%2F0001%2Fstatus.txt
: = %3A
/ = %2F
http%3A%2F%2Fwww.domain.de%2Fschmchris%2Fbilder%2F0001%2Fstatus.txt
: = %3A
/ = %2F
Antwort 7 von SchmChris
Super, perfekt, Danke !
Antwort 8 von SchmChris
Hab es getestet lokal wenn ich vom Server auf eine Datei lokal zugreife geht es, aber wenn ich auf ne datei im netz zugreifen will schreibt er immer offline !
Vielleicht kapier ich es aber auch net !
Kannste nochmal schauen vielleicht wenn du zeit hast semi!
Link
Danke
Vielleicht kapier ich es aber auch net !
Kannste nochmal schauen vielleicht wenn du zeit hast semi!
Link
<?php
include("http://www.schmchris.net/seiten/check.php?url=http://
www.amschroeck.de/schmchris/bilder/0001/status.txt");
?>
Danke
Antwort 9 von semi
Du mußt die url codieren und immer mit http... angeben.
Ich habe mir die Seite angeschaut, bis auf einen Eintrag sind alle online.
Übrigens, die Schriftfarbe links neben dem Text online/offline ist viel zu hell, man sieht nichts.
<?php
include("http://www.schmchris.net/seiten/check.php?url=http%3A%2F%2F
www.amschroeck.de%2Fschmchris%2Fbilder%2F0001%2Fstatus.txt");
?>Ich habe mir die Seite angeschaut, bis auf einen Eintrag sind alle online.
Übrigens, die Schriftfarbe links neben dem Text online/offline ist viel zu hell, man sieht nichts.
Antwort 10 von semi
Übrigens, die eine Seite, die "offline" ist, ist fehlerhaft.
http://www.amschroeck.de/schmchris/bilder/0001/index.php
http://www.amschroeck.de/schmchris/bilder/0001/index.php
Antwort 11 von SchmChris
Ich hab nur den einen roten umgesetzt und nun auch den Code den du oben angeben hast eingefügt. es geht nicht.
Direktstatus
Aber wenn du dann testet und die datei direkt aufrufst siehst du das sie existiert !
Direktstatus
Aber wenn du dann testet und die datei direkt aufrufst siehst du das sie existiert !
Antwort 12 von SchmChris
Wenn die seite ja includet wird stimmen die Pfade ja wieder.
Das zu ändern bekomm ich hin leider bin ich bei der online/offline anzeige auf profis angewiesen !
Das zu ändern bekomm ich hin leider bin ich bei der online/offline anzeige auf profis angewiesen !
Antwort 13 von semi
Hmm. Auf dem Server ist Apache 1.3.19 mit PHP 4.0.6 drauf und es meldet Error 501 Method not implemented.
Klartext: Der Server scheint die HEAD Anforderung nicht zu verstehen, sie ist deaktiviert oder ich habe irgendwo Unsinn in der HEAD-Abfrage.
Moment ich muß paar Sachen testen.
Klartext: Der Server scheint die HEAD Anforderung nicht zu verstehen, sie ist deaktiviert oder ich habe irgendwo Unsinn in der HEAD-Abfrage.
Moment ich muß paar Sachen testen.
Antwort 14 von semi
Versuche mal die folgende abgekürzte Version, ohne Fehlerprüfung oder Weiterverfolgung der Links bei evtl. Umleitung.
Frohe Weihnachten!
Michael
<?php
$purl = parse_url($url);
$socket = fsockopen(
$purl['host'],
empty($purl['port'])?getservbyname($purl['scheme'],'tcp'):$purl['port'],
&$errno, &$errstr, 5
);
if($socket) {
fputs($socket, "HEAD $url HTTP/1.0\r\n\r\n");
$response = fgets($socket, 16);
fclose($socket);
if(preg_match("/^HTTP\/\d+\.\d+\s+200/", $response)) {
echo 'online';
exit;
}
}
echo 'offline';
?>
Frohe Weihnachten!
Michael
Antwort 15 von MusicCreator
So ist es also doch machbar, entschuldigung für meine erste Antwort. Ich hab nicht daran gedacht, dass man ein Script zum Überprüfen des Statuses schreiben kann.
Allen ein schönes Fest!
Jens
Allen ein schönes Fest!
Jens
Antwort 16 von SchmChris
Danke semi - Michael
Nun funktioniert es prima.
Frohe Weihnachten !
Christian
Nun funktioniert es prima.
Frohe Weihnachten !
Christian

