# Server Status like Ping



## Sanic (22. März 2004)

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 ?


----------



## Tim C. (22. März 2004)

> _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.
> ...


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.


----------



## Chino (22. März 2004)

> _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
  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:


```
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
)
```


----------



## Xabbu (22. März 2004)

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!



```
<?
//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>";
?>
```


----------



## Sanic (22. März 2004)

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 ?


----------



## Tim C. (22. März 2004)

> _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.


----------



## Sanic (22. März 2004)

Richtig!
Jetzt ist nur die Frage, wie bekomme ich gescheit das Betriebssystem heraus ?


----------



## Chino (22. März 2004)

> _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


----------



## Tim C. (22. März 2004)

```
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


----------



## Sanic (22. März 2004)

> _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 _
> 
> ```
> echo $_SERVER['SERVER_SIGNATURE'];
> ...


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  *


Das habe ich allerdings auch grad gedacht 

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


----------



## Chino (22. März 2004)

> _Original geschrieben von Sanic _
> *Hört sich ja gut an, aber wenn ich keine Möglichkeit habe PEAR zu installieren kann ich das ganze Paket doch vergessen oder ?  *


 Nein, Du kannst Dir Pear ganz einfach selbst nachinstallieren:

http://pear.php.net/go-pear


----------



## Sanic (22. März 2004)

Ich möchte aber nicht jeden Benutzer, der mal das Script in die Hände bekommt zumuten, das er erst PEAR installieren muss, trotzdem danke


----------



## Chino (22. März 2004)

Tim Comanns hat gesagt.:
			
		

> PEAR in Ehren, aber wer dafür ne eigene Klasse braucht, der hat irgendeinen Klassenfetischismus der in keinster Weise praktikabel ist


Na ja, Du hast ja eigentlich Recht, aber er wollte halt eine komfortable Möglichkeit


----------



## Tim C. (22. März 2004)

> _Original geschrieben von Chino _
> *Na ja, Du hast ja eigentlich Recht, aber er wollte halt eine komfortable Möglichkeit  *


Ein VIP Doppeldeckerbus ist auch komfortabel, allerdings für das zügige, unkomplizierte Vorankommen in Innenstädten absolut ungeeignet .


----------



## Sanic (22. März 2004)

Server_Signature scheint auch nicht wirklich geeignet zu sein 

Ich durchforste gerade die phpinfo()´s dieser Welt und stoße teilweise auf abstruse oder gar keine Angaben bei Server_Signature.
Welch leidiges Kapitel


----------



## Chino (22. März 2004)

> _Original geschrieben von Tim Comanns _
> *Ein VIP Doppeldeckerbus ist auch komfortabel, allerdings für das zügige, unkomplizierte Vorankommen in Innenstädten absolut ungeeignet . *


Jaja, ist ja schon gut. Ne kleine Function reicht ja auch aus


----------



## Tim C. (22. März 2004)

> _Original geschrieben von Sanic _
> *Server_Signature scheint auch nicht wirklich geeignet zu sein
> 
> Ich durchforste gerade die phpinfo()´s dieser Welt und stoße teilweise auf abstruse oder gar keine Angaben bei Server_Signature.
> Welch leidiges Kapitel  *


Was passiert denn wenn du 

```
echo $_SERVER['SERVER_SIGNATURE'];
```
machst? Funktioniert das auf nicht-Apache-Systemen überhaupt nicht?


----------



## Chino (22. März 2004)

> _Original geschrieben von Tim Comanns _
> *Was passiert denn wenn du
> *
> 
> ...


Jepp, funktioniert nicht. Hier bei mir auf dem Test-System (Windows 2000 Server, IIS 5.0, PHP Version 4.3.4) kommt keine Ausgabe.


----------



## Tim C. (22. März 2004)

Ok, dann macht man einfach ein exec("ls") und wenn der "Unbekannter Befehl" oder so zurückgibt, ist es ein Windows System, wenn nicht ein Unix System?


----------



## JohannesR (22. März 2004)

```
<?php
echo PHP_OS;
?>
```


----------



## ludz (22. März 2004)

Juchhuu! Diese Konstante war mir ehrlich gesagt bis jetzt unbekannt. Danke Johannes, die kann man bestimmt immer mal gebrauchen  

PS: Interssant ist hierbei vielleicht auch die Funktion php_uname();


----------



## Sanic (22. März 2004)

Genial!  
Danke ;-)


----------



## Sanic (22. März 2004)

Gibt es irgendwo eine schöne Übersicht aller Konstanten die in PHP eingebaut sind ?
Diese war mir auch nicht bekannt


----------



## Tim C. (22. März 2004)

> _Original geschrieben von Johannes Röttger _
> 
> ```
> <?php
> ...


Hui, man lernt nie aus


----------



## der_byte_b0zZ (6. Januar 2005)

Warum macht ihr es net einfach so :

<?php
$ping = `ping xxx.xxx.xxx.xxx`;
echo "$ping"
?>


----------

