Quick & Dirty Sys_Ping() Ersatz

Falls ihr so wie ich Probleme habt mit Sys_Ping(), beispielsweise fehlerhafte Positivrückmeldungen obwohl das Gerät gar nicht erreichbar ist… hier ein simpler, fieser, aber zumindest bei mir gut funktionierender Workaround, der den Ping-Befehl von Windows verwendet. Einfach statt Sys_Ping Ext_Ping verwenden.

function Ext_Ping($host, $timeout)
{
	$returnArray = Array();
	exec("cmd.exe /c ping " . $host . " -n 1 -w " . $timeout, $returnArray);

	for ($i = 0; $i < count($returnArray); $i++)
	{
	   if(strpos($returnArray[$i], "Antwort von ") !== FALSE) return true;
	}
	return false;
}

Super Sache.

Musst Du aber auch aufpassen weil nicht jede Windowes-Version gleich antwortet (unabhängig von der Sprache). Bin ich schon einmal bei Nagios darauf reingefallen.

Leider hatte ich hier immer noch einen Fehler: die Ausgabe sagt manchmal sowas wie:

Antwort von 192.168.1.2: Zielhost nicht erreichbar ...

Ich hab sicherheitshalber ne Schleife um Ext_Ping, da mein Handy manchmal „schläft“ und nicht beim ersten mal antwortet. Beim 3-5 Versuch kommt allerdings:) oben genannte Meldung bei mir (Homeserver 2011), sodass hier ein true geliefert wurde (was ja falsch war). Deshalb die 2. Bedingung, die prüft, ob es die „nicht erreichbar“-Meldung ist.

function Ext_Ping($host, $timeout)
{
    $returnArray = Array();
    exec("cmd.exe /c ping " . $host . " -n 1 -w " . $timeout, $returnArray);

    for ($i = 0; $i < count($returnArray); $i++)
    {
       if(strpos($returnArray[$i], "Antwort von ") !== FALSE
		 	&& strpos($returnArray[$i], "nicht erreichbar") === FALSE)
   	 {
			 return true;
		 }
    }
    return false;
}

kluge Ergänzung, danke!