Heim > Backend-Entwicklung > PHP-Tutorial > Warum gibt meine PHP-Ping-Funktion unabhängig von der IP-Adresse immer „dead' zurück?

Warum gibt meine PHP-Ping-Funktion unabhängig von der IP-Adresse immer „dead' zurück?

DDD
Freigeben: 2024-11-06 05:13:02
Original
797 Leute haben es durchsucht

Why does my PHP ping function always return

Anpingen einer IP-Adresse mit PHP und Echo des Ergebnisses

Bei dieser Programmierfrage sucht ein Benutzer Hilfe beim Erstellen einer PHP-Funktion zum Pingen eine IP-Adresse und zeigt an, ob sie aktiv ist oder nicht. Sie haben eine Funktion implementiert, die jedoch unabhängig von der angegebenen IP-Adresse immer „tot“ zurückgibt.

Anfangsfunktion:

function pingAddress($ip){
    $pingresult = shell_exec("start /b ping $ip -n 1");
    $dead = "Request timed out.";
    $deadoralive = strpos($dead, $pingresult);

    if ($deadoralive == false){
        echo "The IP address, $ip, is dead";
    } else {
        echo "The IP address, $ip, is alive";
    }

}
Nach dem Login kopieren

Erklärung:

Die Funktion versucht, die IP-Adresse mithilfe der Funktion „shell_exec“ zu pingen, mit der Option -n 1, um nur eine Ping-Anfrage zu senden. Anschließend wird die Ausgabe des Ping-Befehls auf die Zeichenfolge „Zeitüberschreitung der Anforderung“ überprüft. um festzustellen, ob die IP-Adresse aktiv ist.

Probleme:

  1. Windows-spezifischer Befehl: Der Befehl start /b ping ist spezifisch für Windows und funktioniert möglicherweise nicht auf anderen Betriebssystemen.
  2. Strpos für die Ausgabe verwenden: Die direkte Überprüfung der Position einer Zeichenfolge in der Ping-Ausgabe kann als Ausgabeformat unzuverlässig sein kann je nach Version des Ping-Befehls variieren.
  3. Fehlende doppelte Anführungszeichen: Die Variable $ip ist nicht in doppelte Anführungszeichen eingeschlossen, was eine ordnungsgemäße Interpretation verhindern könnte.

Vorgeschlagene Lösung:

Die Frage des Benutzers schlägt auch eine alternative Lösung vor:

function pingAddress($ip) {
    $pingresult = exec("/bin/ping -n 3 $ip", $outcome, $status);
    if (0 == $status) {
        $status = "alive";
    } else {
        $status = "dead";
    }
    echo "The IP address, $ip, is  ".$status;
}
Nach dem Login kopieren

Erklärung:

Diese Funktion:

  1. Verwendet die exec-Funktion, um den Ping-Befehl mit der Option -n 3 auszuführen, um drei Ping-Anfragen zu senden.
  2. Überprüft den Exit-Status des Ping-Befehls, wobei a Der Status 0 zeigt einen erfolgreichen Ping an (d. h. die IP-Adresse ist aktiv).
  3. Verwendet die Variable $status, um zu bestimmen, ob die IP-Adresse aktiv oder tot ist, und zeigt das Ergebnis entsprechend an.

Das obige ist der detaillierte Inhalt vonWarum gibt meine PHP-Ping-Funktion unabhängig von der IP-Adresse immer „dead' zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage