Server Online-Offline Check

Neue Projekte und Anfragen, Teamarbeiten und Alpha/Beta Scripte jeder Art.
KEINE Supportanfragen zu bestehenden MODs!
Antworten
easygo
Beiträge: 155
Registriert: Fr 22.Okt, 2004 13:20
Kontaktdaten:

Server Online-Offline Check

Beitrag von easygo »

Hi, vielleicht kennt ihr das Problem. Auf eurem Board wird fremder Script
ausgeführt, aber manchmal ist die Source URL down oder net erreichbar.
Dann gibt das unschöne Kreuze bzw. lange Ladezeiten bis Timeout.

Jo, wie lässt sich so was vermeiden?

Ich denk mal, am besten mit nem Script, der die Source URL vorher abfragt.
Blos wie lässt sich das Ganze für phpbb umsetzen?

Letzter Stand ist, das Script in eine status.php zu packen, die Datei zu includen
und der URL voranzustellen, aber das Ergebnis sind nur Kreuze...

Code: Alles auswählen

<?php 

$live = '<img src="' . $images['icon_online'] . '" alt="' . $lang['Online'] . '" title="' . $lang['Online'] . '" border="0" />';
$dead = '<img src="' . $images['icon_offline'] . '" alt="' . $lang['Offline'] . '" title="' . $lang['Offline'] . '" border="0" />';
$purl = parse_url($url); 
$p_link = str_replace("http://", "", $url); 
$s_link = str_replace("/check.txt", "", $p_link); 
list($addr,$port)= explode (':',"$s_link"); 
if (empty($port)){ 
$port = 80; 
} 
$churl = @fsockopen(server($addr), $port, $errno, $errstr, 7); 
if (!$churl){ 
header("Location: $dead"); 
} 
else { 
if ($socket = fsockopen($purl['host'], empty($purl['port'])?getservbyname($purl['scheme'],'tcp'):$purl['port'], &$errno, &$errstr, 5))
{ 
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)) 
{ 
header("Location: $live");
exit; 
} 
else {
header("Location: $dead");
exit; 
}
}
} 
function server($addr){ 
if(strstr($addr,"/")){$addr = substr($addr, 0, strpos($addr, "/"));} 
return $addr;  
}
?>
Vielleicht gibts ja schon ne richtig gute Lösung für...
ich hab nur nichts gefunden dazu.

Wär super, wenn wer weiterhelfen kann.
Diskutiere nie mit einem Idioten: Erst zieht er dich auf sein
Niveau runter und dort schl?gt er dich mit Erfahrung.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Man könnte mit socket_set_timeout() die Zeit für die Verbindung festsetzen um mit fsocketopen() die Ansprechbarkeit zu prüfen. Also mit fsocketopen() einen Zeiger öffnen und mit socket_set_timeout() diesen nach X Sekunden, bzw. Millisekunden wieder schliessen.
Damit wäre eine Prüfung vorhanden, ob die URL erreichbar ist oder nicht.
Vielleicht klappt es damit.
Schau mal auf http://www.php.net in die Online-Hilfe hierzu.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
easygo
Beiträge: 155
Registriert: Fr 22.Okt, 2004 13:20
Kontaktdaten:

Beitrag von easygo »

Danke, muss ich doch gleich mal austesten
das mit socket_set_timeout

Code: Alles auswählen

<?php
$fp = fsockopen("www.example.com", 80);
if(!$fp) {
   echo "Keine Verbindung möglich\n";
} else {
   fputs($fp,"GET / HTTP/1.0\n\n");
   $start = time();
   socket_set_timeout($fp, 2);
   $res = fread($fp, 2000);
   var_dump(socket_get_status($fp));
   fclose($fp);
   print $res;
}
?>
Echo kann ja irgendwas sein (zur Not blank.gif oder &nbsp;)
Diskutiere nie mit einem Idioten: Erst zieht er dich auf sein
Niveau runter und dort schl?gt er dich mit Erfahrung.
Antworten