Andreas Korthaus: Pingen mit PHP

Beitrag lesen

Hallo!

Ich möchte mit PHP einen Host anpingen um dessen erreichbarkeit zu überprüfen. Das habe ich so gelöst.

$ping = ping -n 1 $host;
echo $ping

Jedoch wird nichts ausgegeben... Warum ? Gibt es nicht vielleicht schon eine fertige Ping Funktion ? warum wird der DOS Befehl nicht ausgeführt ?

Hm, ich habe keine Ahnung wie die Shell-Umgebung von PHP unter Windows aussieht(und schon gar nicht speziell bei Dir), wenn man Systemaufrufe startet. Eigentlich sieht das so richtig aus, aber vieleicht solltest Du mal den kompletten Pfad zur ping.exe versuchen? Ich verwende eigentlich lieber shell_exec(), dazu habe ich mehr Vertrauen ;-)

Du solltest den Befehl vielleicht mal testweise mit exec() oder system() ausführen, denn diese bietet im Gegesatz zu den anderen Systemaufrufen die Möglichkeit einen "Statuswert" zu erzeugen, der Dir sagt ob der Aufruf in der Shell geklappt hat, siehe http://de3.php.net/manual/en/function.system.php für Details (ich habe bewußt die englische Version verlinkt, da diesbezüglich aktueller)

Nur zum testen würde ich mal folgendes probieren(ungetestet):

<?php
echo '<pre>';
$last_line = system('ping web.de', $retval);
echo '
</pre>
<hr>Last line of the output: '.var_dump($last_line).'
<hr>Return value: '.var_dump($retval);
?>

Poste mal die Ausgabe des Scriptes, und versuche es mal mit dem absoluten Pfad zur ping.exe.

Variablen in einem Systemaufruf zu verwenden ist ein potentielles Sicherheitsrisiko, wenn $host z.B. aus $_POST['host'] kommt, kann das sehr gefährlich werden. eigentlich sollte man das wo geht vermeiden, und sonst solltest Du Dir auf alle Fälle folgende Funktionen ansehen:
http://de3.php.net/escapeshellcmd
http://de3.php.net/escapeshellarg

Grüße
Andreas