Homepage selbermachen 7.851 Themen, 35.615 Beiträge

ping mit php?

Active A / 5 Antworten / Baumansicht Nickles

Hallo, ich wollte die members area auf meinen Heim-PC mit Flat legen. Da ich eine dynamische IP habe wird die Adresse automatisch über dyndns.org aktualisiert. Da mein Rechner immer mal wieder offline ist, wollte ich vermeiden das die Besucher eine Fehlermeldung bekommen und einen Hinweis sehen, das die M.A. zeitweise nicht verfügbar ist. Jetzt habe ich gedacht das php bei dem Aufruf der Loginseite auf der HP im Netzt erst meinen Rechner anping und je nach positiven oder negativen Ergebnis reagiert. Die Frage ist wie mache ich das oder gibt es noch eine bessere Lösung, die nicht darauf "reinfällt" wenn jemand anderes dann mit meiner alten IP unterwegs ist und meine noch nicht aktualisiert wurde (oder der Rechner offline ist).

Danke für eure Mühe, Achim

bei Antwort benachrichtigen
xafford Active A „ping mit php?“
Optionen

je nachdem welchen serverdienst du anbietest baust du folgende funktion:
function scan()
{
$ip="xxx.xxx.xxx.xxx"; [string]
$port=port des zu überprüfenden serverdienstes; [kein string!]
$time=Zeit in ms; [kein string!]
$sp=fsockopen("$ip",$port,$time);
if(!sp){$msg="offline";}
else{$msg="online";fclose($sp);}
return $msg;
}

in der seite rufst du dann die funktion auf:
$status=scan();
print("$status");

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Active A Nachtrag zu: „ping mit php?“
Optionen

Danke für den Tip, das klappt gut.
Gruß Achim

bei Antwort benachrichtigen
Dumistvieh Active A „ping mit php?“
Optionen

Natürlich. Du plazierst auf Deinem "Home-Webserver" eine weitere Datei, etwa mit dem Inhalt "ja, ich bin es". Nach dem "Ping" mußt Du einfach nachschauen, ob diese Datei verfügbar ist. Du könntest die Host angabe beispielsweise so umformulieren:

$sock = fsockopen("domain.tld/ichbins.html",80,5);

Oder aber Du "parst" den Inhalt auch gleich mit. Mit fread liest Du aus dem Socket und vergleichst einfach die Daten. In Deiner Datei schreibst Du einfach rein "ich bin der richtige". Und dann:

$data = fread($sock,1024);
if ( $data == "ich bin der richtige" && isset($sock) )
// Jetzt gehts weiter
else
// Mach sonstwas...

Wahrscheinlich mußt Du aber eine HTTP-Anfrage mit fputs zuerst schicken, jedenfalls mache ich das so. Ob das zum Beispiel bei einer reinen Textdatei nötig ist, wage ich zu bezweifeln.

Gruß
Dumistvieh

--- wie immer: ALLE ANGABEN OHNE GEWEHR ÄH GEWÄHR!
bei Antwort benachrichtigen
Dumistvieh Active A „ping mit php?“
Optionen

Ups. Kleine Korrektur (edit geht net, kein Premiumaccount):
---------------------------------

$sock = fsockopen("domain oder ip",$port,$time);
$request = "GET /datei.html HTTP 1.0\\r\\n";
$request .= "Host: deinedomain\\r\\n";
$request .= "Referer: keine Ahnung\\r\\n";
$request .= "User-Agent: Micro\\$oft Interner Exploder\\r\\n\\r\\n";

fputs($sock,$request);
$reply = array();

while ( !feof($sock) )
$reply[] = fgets($sock,1024);

fclose($sock);

foreach ( $reply as $var ){
if ( $var == "ja ich bins" )
//weiter
else
//abbruch
}

---------------------------------

Wenn man es eilig hat :)

Gruß
Dumistvieh

--- wie immer: ALLE ANGABEN OHNE GEWEHR ÄH GEWÄHR!
bei Antwort benachrichtigen
Active A Dumistvieh „Ups. Kleine Korrektur edit geht net, kein Premiumaccount :...“
Optionen

Ich werde das ausprobieren sobald ich dazu die Zeit habe, solange gibt es halt noch ein kleines "Restrisiko" das jemand auf den falschen Rechner zugreift. Vielen Dank für die Hilfe.

bei Antwort benachrichtigen