Faire un ping en php

Salut a tous,

J'ai besoin de voir si un serveur est UP ou DOWN, pour cela, je dois faire un ping de ma machine a distance.

Le problème c'est que que j'essaye de me ping moi-même ou de ping un site internet qui marche, tout fonctionne parfaitement, mais quand je ping une autr emachine connecté au reseau, sa bug !

Voila le message :

Warning: fsockopen() [function.fsockopen]: unable to connect to 10.19.2.52:80 (Une tentative de connexion a échoué car le parti connecté n'a pas répondu convenablement au-delà d'une certaine durée ou une connexion établie a échoué car l'hôte de connexion n'a pas répondu. )(10060)


Et puis voila mon code, il est tout simple !

$fp = fsockopen("10.19.2.51", 80, $errno, $errstr, 10);     
   if (!$fp)    
   {   
    echo "$errstr ($errno)<br />\n"; echo '<img src="down.png" alt="serveur down" />';   
   }    
   else    
   {   
    echo '<img src="up.png" alt="serveur up" />';   
   }   
   fclose($fp);  
    
   echo '<hr/>';     
     
   $fp = fsockopen("10.19.2.52", 80, $errno, $errstr, 10);   
   if (!$fp)    
   {   
    echo "$errstr ($errno)<br />\n"; echo '<img src="down.png" alt="serveur down" />';   
   }    
   else    
   {   
    echo '<img src="up.png" alt="serveur up" />';   
   }   
   fclose($fp);


Le premier étant mon adresse IP, le ping renvoi la bonne image.
Le deuxieme étant une autre machine, le ping renvoi l'erreur !

Merci

EDIT : Je viens de penser a un truc, est-ce l'erreur de ping pourrait venir du fait que je teste en local et non sur un serveur ?

5 réponses

  1. Voici un p'tit script d'exemple qui devrait t'intéresser (j'te laisse l'adapter à tes besoins ;) ) :
    <?php
    $sAdresse[] = "www.google.fr";
    $sAdresse[] = "www.google_wrong_ndd.fr";
    foreach($sAdresse as $sAdresse){
        $aResult = Array();
        exec("ping ".$sAdresse, $aResult);
        echo "<pre>".print_r($aResult, true)."</pre>";
    }
    ?>
    
    1. merci pour la réponse, Si je comprends bien, sa envoi la commande "ping (adresse ip)" et sa stock les données dans un tableau ?

      Mais comment voir si on a une réponse pour ensuite afficher une image?

      En comparant le nombre de paquets envoyés et de paquets reçues ? En utilisant le nombre de paquets perdus ?

      Merci
      1. bonjour,

        juste une esquisse d'idée

        tu fais ton test en local avec quels types de machine ?
        pc ? serveur ?

        car selon le type de machine le port 80 n'est pas forcement et ouvert et ton ping plante...

        Adns
        1. https://www.php.net/manual/fr/function.exec.php : <i>Exécute un programme externe</i>

          Après comme j'ai fait exprès dans l'exemple, tu vois bien que le nombre de résultat est différents et que le message retourné aussi, y a plus qu'à s'axer sur ça pour faire ce que tu veux comme afficher une image, du texte etc...