Maison  >  Article  >  développement back-end  >  Pourquoi ma fonction ping PHP renvoie-t-elle toujours « mort » quelle que soit l'adresse IP ?

Pourquoi ma fonction ping PHP renvoie-t-elle toujours « mort » quelle que soit l'adresse IP ?

DDD
DDDoriginal
2024-11-06 05:13:02716parcourir

Why does my PHP ping function always return

Pinger une adresse IP à l'aide de PHP et faire écho au résultat

Dans cette question de programmation, un utilisateur demande de l'aide pour créer une fonction PHP pour pinger une adresse IP et afficher si elle est vivante ou non. Ils ont implémenté une fonction, mais elle renvoie systématiquement "mort" quelle que soit l'adresse IP fournie.

Fonction initiale :

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";
    }

}

Explication :

La fonction tente de pinger l'adresse IP à l'aide de la fonction shell_exec, avec l'option -n 1 pour envoyer une seule requête ping. Il vérifie ensuite la sortie de la commande ping pour la chaîne « Demande expirée ». pour déterminer si l'adresse IP est active.

Problèmes :

  1. Commande spécifique à Windows : La commande start /b ping est spécifique à Windows, et il peut ne pas fonctionner sur d'autres systèmes d'exploitation.
  2. Utiliser strpos sur la sortie : Vérifier directement la position d'une chaîne dans la sortie ping peut être peu fiable, car le format de sortie peut varier selon la version de la commande ping.
  3. Guillemets doubles manquants : La variable $ip n'est pas entourée de guillemets doubles, ce qui pourrait empêcher une bonne interprétation.

Solution proposée :

La question de l'utilisateur suggère également une solution alternative :

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;
}

Explication :

Cette fonction :

  1. Utilise la fonction exec pour exécuter la commande ping avec l'option -n 3 pour envoyer trois requêtes ping.
  2. Vérifie l'état de sortie de la commande ping, où un un statut de 0 indique un ping réussi (c'est-à-dire que l'adresse IP est active).
  3. Utilise la variable $status pour déterminer si l'adresse IP est active ou morte et affiche le résultat en conséquence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn