Server Status like Ping

Sanic

Erfahrenes Mitglied
Hallo :)
Ich möchte den reinen Onlinestatus eines Rechners überprüfen ohne fsockopen ( hab da eh keine großartigen Services drauf! ).
Wenn ich nun einen exec ( "ping xxx.xxx.xxx.xxx "); mache, rattert bei Windows der Ping 4 mal durch und wird abgebrochen.
So weit so gut.
Bei Unix System kann es durchaus sein, das diese Pings kontinuierlich gesendet werden und erst durch STRG^C abgebrochen werden müssen.

Gibt es eine komfortable Möglichkeit für einen einfachen ping in PHP ?
 
Original geschrieben von Sanic
Hallo :)
Ich möchte den reinen Onlinestatus eines Rechners überprüfen ohne fsockopen ( hab da eh keine großartigen Services drauf! ).
Wenn ich nun einen exec ( "ping xxx.xxx.xxx.xxx "); mache, rattert bei Windows der Ping 4 mal durch und wird abgebrochen.
So weit so gut.
Bei Unix System kann es durchaus sein, das diese Pings kontinuierlich gesendet werden und erst durch STRG^C abgebrochen werden müssen.

Gibt es eine komfortable Möglichkeit für einen einfachen ping in PHP ?
Ein Ping geht in PHP nur über die von dir angesprochenen Commandline Kommandos. Auf einem Linux System z.B. nutzt du ping -c 4 http://www.host.com um 4 Pings auszuführen.
Du musst dann natürlich immer noch die Ausgabe die exed() zurückliefert auswerten um auch den richtigen Schluss daraus zu ziehen.
 
Original geschrieben von Sanic
Gibt es eine komfortable Möglichkeit für einen einfachen ping in PHP ?
Es gibt dafür ein schönes kleines Pear-Paket. Zu finden unter: http://pear.php.net/package/Net_Ping.

Beispiel:

PHP:
<?php
  require_once "Net/Ping.php";
  $ping = Net_Ping::factory();
  if(PEAR::isError($ping)) {
    echo $ping->getMessage();
  } else {
    $ping->setArgs(array('count' => 2, 'deadline' => 1));
    print_r($ping->ping('www.google.de'));
  }
?>
Ausgabe:

Code:
net_ping_result Object
(
    [_icmp_sequence] => Array
        (
            [0] => 47
            [1] => 55
        )

    [_target_ip] => 216.239.59.104
    [_bytes_per_request] => 32
    [_bytes_total] => 64
    [_ttl] => 244
    [_raw_data] => Array
        (
            [0] => 
            [1] => Ping www.google.akadns.net [216.239.59.104] mit 32 Bytes Daten:
            [2] => 
            [3] => Antwort von 216.239.59.104: Bytes=32 Zeit=47ms TTL=244
            [4] => Antwort von 216.239.59.104: Bytes=32 Zeit=55ms TTL=244
            [5] => 
            [6] => Ping-Statistik f?r 216.239.59.104:
            [7] =>     Pakete: Gesendet = 2, Empfangen = 2, Verloren = 0 (0% Verlust),
            [8] => Ca. Zeitangaben in Millisek.:
            [9] =>     Minimum = 47ms, Maximum = 55ms, Mittelwert = 51ms
        )

    [_sysname] => windows
    [_round_trip] => Array
        (
            [min] => 47
            [avg] => 55
            [max] => 51
        )

    [_transmitted] => 2
    [_received] => 2
    [_loss] => 0
)
 
Hier mal ein Beispiel (UNIX). Was Du mit der Ausgabe machst, ist Dir überlassen. Ich habe es in diesem Beispiel einfach nur ausgegeben. Kannst ja damit noch ne Statistitk erstellen. ;)

Gruß Xabbu!


PHP:
<?
//Config
$ziel = "www.zielhost.de";
$ping_anzahl = 5;
//End Config

//Kommando Befehl
$kommando = "ping ".$ziel." -c ".$ping_anzahl;

//Befehl ausführen
$ergebnis = shell_exec($kommando);

//Ergebnis verarbeiten
$ergebnis = explode("\n", $ergebnis);
foreach($ergebnis as $k => $v)
	//Ausgabe
	echo $k." -- ".$v."<br>";
?>
 
Zuletzt bearbeitet:
Aber um es beiden System ( Windows / Unix ) und PHP ohne PEAR möglich zu machen müsste ich erst das Betriebssystem herausfinden und dann einen dementsprechenden Ping Befehl senden oder denke ich da falsch ? :)
 
Original geschrieben von Sanic
Aber um es beiden System ( Windows / Unix ) und PHP ohne PEAR möglich zu machen müsste ich erst das Betriebssystem herausfinden und dann einen dementsprechenden Ping Befehl senden oder denke ich da falsch ? :)
Nein ich denke da denkst du völlig richtig, alleine schon, weil unter Windows das Paramter für die Anzahl der Pings n ist und unter Linux ja anscheinend c.
 
Original geschrieben von Sanic
Aber um es beiden System ( Windows / Unix ) und PHP ohne PEAR möglich zu machen müsste ich erst das Betriebssystem herausfinden und dann einen dementsprechenden Ping Befehl senden oder denke ich da falsch ? :)
Ja klar. Deswegen ist bei der Pear-Klasse oben auch noch eine weitere Klasse, die das Betriebsystem herausfindet, dabei. Also einfacher gehts nicht ;)
 
PHP:
echo $_SERVER['SERVER_SIGNATURE'];
Gibt bei meinem Testsystem hier auf Windows2000 z.B.

Apache/2.0.48 (Win32) PHP/4.3.4 Server at localhost Port 80

zurück und auf einem Linux System wird an entsprechender Stelle halt irgendwas anderes stehen. Was genau musst du halt gucken.

//edit:
Ja klar. Deswegen ist bei der Pear-Klasse oben auch noch eine weitere Klasse, die das Betriebsystem herausfindet, dabei. Also einfacher gehts nicht
PEAR in Ehren, aber wer dafür ne eigene Klasse braucht, der hat irgendeinen Klassenfetischismus der in keinster Weise praktikabel ist ;). Wobei ich natürlich nicht weiss, wie die SERVER_SIGNATURE auf nicht Apache Systemen aussieht, da könnte es dann doch sinnvoll sein :rolleyes:
 
Original geschrieben von Chino
Ja klar. Deswegen ist bei der Pear-Klasse oben auch noch eine weitere Klasse, die das Betriebsystem herausfindet, dabei. Also einfacher gehts nicht ;)
Hört sich ja gut an, aber wenn ich keine Möglichkeit habe PEAR zu installieren kann ich das ganze Paket doch vergessen oder ? :)

Original geschrieben von Tim Comanns
PHP:
echo $_SERVER['SERVER_SIGNATURE'];

Gibt bei meinem Testsystem hier auf Windows2000 z.B.

Apache/2.0.48 (Win32) PHP/4.3.4 Server at localhost Port 80

zurück und auf einem Linux System wird an entsprechender Stelle halt irgendwas anderes stehen. Was genau musst du halt gucken.

//edit:

PEAR in Ehren, aber wer dafür ne eigene Klasse braucht, der hat irgendeinen Klassenfetischismus der in keinster Weise praktikabel ist ;)
Vielen Dank für den guten Gedankenansatz!


Original geschrieben von Tim Comanns

PEAR in Ehren, aber wer dafür ne eigene Klasse braucht, der hat irgendeinen Klassenfetischismus der in keinster Weise praktikabel ist ;). Wobei ich natürlich nicht weiss, wie die SERVER_SIGNATURE auf nicht Apache Systemen aussieht, da könnte es dann doch sinnvoll sein :rolleyes:
Das habe ich allerdings auch grad gedacht ;)

@ Pear: "Er sah vor lauter Objekten das Programm nicht".
Ein schönes Zitat :)
 
Zurück