[PHP] Probleme avec exec() positionné dans une boucle...[resolu]

Probleme avec exec() positionné dans une boucle...[resolu] [PHP] - PHP - Programmation

Marsh Posté le 02-01-2003 à 14:34:35    

Bonjour ,  
 
je ne comprends pas pkoi mon exec() ne s'execute ke dans le 1er tour de boucle, alors k'il devrait s'executer a chaque tour  :(  
 
Voici mon code, si vous pouver m'eclairer  :jap:  :jap:  
 

Code :
  1. ...
  2. while($row = mysql_fetch_array($y)) {
  3. echo '<tr><td align=center>'.ucfirst($row['ip']).'</td>';
  4. echo '<td align=center>'.ucfirst($row['model']).'</td>';
  5. echo '<td align=center>'.ucfirst($row['serial']).'</td>';
  6. echo '<td align=center>'.ucfirst($row['baie']).'</td>';
  7. echo '<td align=center>'.ucfirst($row['site']).'</td>';
  8. echo '<td align=center>'.ucfirst($row['os']).'</td>';
  9. exec("ping -n 1 ".$row['ip']."", $ping);
  10. while (list ($key, $val) = each ($ping)) {
  11.  if ($key == '6') {
  12.    if (ereg("0%" , $val) == TRUE) {
  13.     echo '<td align=center>UP</td>'; }
  14.    if (ereg("100%" , $val) == TRUE)  {
  15.     echo '<td align=center>DOWN</td>'; }
  16.      }
  17.  }
  18. echo '<td align=center>'.ucfirst($row['description']).'</td>';
  19. echo '<td align=center><input type=checkbox name=oui[] value='.$row['serveur_id'].'></td>';
  20. echo '<td align=center><a href="modif_serveur.php?status=3&serveur_id='.$row['serveur_id'].'">modifier</a></td></tr>';
  21. }


Message édité par raph93 le 03-01-2003 à 16:21:19

---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 02-01-2003 à 14:34:35   

Reply

Marsh Posté le 02-01-2003 à 16:42:03    


 [:athlonmp]


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 02-01-2003 à 17:40:10    

je crois qu'il faut que tu mette == et non = dans la condition des deux while

Reply

Marsh Posté le 02-01-2003 à 17:59:33    

forummp3 a écrit :

je crois qu'il faut que tu mette == et non = dans la condition des deux while


 
en fait ca marche bien pour ttes les lignes mais y'a juste l'exec() k'ait executé une seul fois  :(  


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 02-01-2003 à 23:29:50    

pkoi tu penses quil est executé quuen seule fois ?
tu las affiché $ping a chaque tour ?

Reply

Marsh Posté le 03-01-2003 à 09:27:26    

beleg a écrit :

pkoi tu penses quil est executé quuen seule fois ?
tu las affiché $ping a chaque tour ?


 
ouais j'affiche le resultat a chaque tour , il sffiche que lors de la 1ere ligne  :(


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 03-01-2003 à 11:52:44    

http://www.php.net/manual/en/function.exec.php
 
je pense quil y a la solution, je poste ce que jai fait a mon retour

Reply

Marsh Posté le 03-01-2003 à 12:30:49    

raph93 a écrit :


 
ouais j'affiche le resultat a chaque tour , il sffiche que lors de la 1ere ligne  :(  


 

Code :
  1. <?php
  2. for ($i=0;$i<5;$i++)
  3.    {
  4.      exec("ping -n 1 www.google.fr", $ping);
  5.      echo "PING <<  ".$ping["6"]."  >><br><br>" ;
  6.      print_r($ping);
  7.      echo "<hr>";
  8.    
  9.      while (list ($key, $val) = each ($ping)) {
  10.      
  11.         if ($key == '6') {
  12.        
  13.             if (ereg("0%" , $val) == TRUE) {
  14.          
  15.              echo 'UP'; }
  16.        
  17.             if (ereg("100%" , $val) == TRUE)  {
  18.          
  19.              echo 'DOWN'; } 
  20.        
  21.             }
  22.       }
  23.       echo "<hr>";
  24.       //unset($ping);
  25.   }
  26.   ?>

Reply

Marsh Posté le 03-01-2003 à 12:50:40    

Probleme resolu mais g pas les droit pour editer mon topic
 
en fait avant de lancer la boucle je devais rajouter ça :
 

Code :
  1. while($row = mysql_fetch_array($y)) {
  2. $ping = $ping.$row['serveur_id'];
  3. exec("ping -n 1 ".$row['ip']."", $ping);
  4. while (list ($key, $val) = each ($ping)) {
  5.  if ($key == '6') {
  6.    if (ereg(" 0%" , $val) == TRUE) {
  7.    echo '<td align=center >UP</td>'; }
  8.    else {
  9.     echo '<td align=center bgcolor=#FFFFFF>DOWN</td>'; }
  10.     }


Message édité par raph93 le 03-01-2003 à 12:52:31

---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 03-01-2003 à 13:03:18    

tu peux mexpliquer le pkoi de cet ajout ?
 
$ping = $ping.$row['serveur_id'];
     
   

Reply

Marsh Posté le 03-01-2003 à 13:03:18   

Reply

Marsh Posté le 03-01-2003 à 15:31:09    

beleg a écrit :

tu peux mexpliquer le pkoi de cet ajout ?
 
$ping = $ping.$row['serveur_id'];
     
     


 
comme ça la variable $ping est unique à chaque tour de boucle,  
 
ca faisait 2 jours que je me prenais la tete là dessus , le principal maintenant c'est que ca marche
 
 :jap:


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 03-01-2003 à 15:35:46    

deux jours alors que c marqué dans le doc sur php.net :
il faut faire un unset($ping).
 
ta solution de concatener un tableau ($ping) avec une chaine de caracteres, cest un peu nimp.
 
et pkoi pas lire $ping[6] directement au lieu de parcourir tt le tableau pr rechercher la key 6 ???

Reply

Marsh Posté le 03-01-2003 à 16:06:20    

beleg a écrit :

deux jours alors que c marqué dans le doc sur php.net :
il faut faire un unset($ping).
 
ta solution de concatener un tableau ($ping) avec une chaine de caracteres, cest un peu nimp.
 
et pkoi pas lire $ping[6] directement au lieu de parcourir tt le tableau pr rechercher la key 6 ???


 
Bon ok , j'ai fait une connerie jvais essayer ta methode  :jap:  
 
jvais refaire des test mais bizarrement la 1ere methode genere plus vite le resultat  :heink:  
 
Ca me parait bizarre, etant donnée que t'as solution est bien meilleur sur le papier
 

  • 1e methode :


Temps de genration de la page (1ere Methode) : 1.600 secondes (17 machines à pinger)
 

Code :
  1. while($row = mysql_fetch_array($y)) {
  2. $ping = $ping.$row['serveur_id'];
  3. exec("ping -n 1 ".$row['ip']."", $ping);
  4.      while (list ($key, $val) = each ($ping)) {
  5.  if ($key == '6') {
  6.    if (ereg(" 0%" , $val) == TRUE) {
  7.   echo '<td align=center >UP</td>'; }
  8.    else {
  9.           echo '<td align=center bgcolor=#FFFFFF>DOWN</td>'; }
  10.            }
  11.          
  12.            }
  13.            }


 
 

  • 2eme Methode :


Temps de genration de la page (2eme Methode) : 2.135 secondes (17 machines à pinger)
 

Code :
  1. while($row = mysql_fetch_array($y)) {
  2. exec("ping -n 1 ".$row['ip']."", $ping);
  3. $val = $ping[6];
  4.    if (ereg(" 0%" , $val) == TRUE) {
  5.   echo '<td align=center >UP</td>'; }
  6.    else {
  7.           echo '<td align=center bgcolor=#FFFFFF>DOWN</td>'; }
  8.            }


Message édité par raph93 le 03-01-2003 à 16:19:59

---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 03-01-2003 à 16:21:38    

:bounce:
 
apres de nombreux test ta methode affiche un temps d'execution > 1 minutes , je gardes donc ta methode  :jap:


Message édité par raph93 le 03-01-2003 à 16:24:34

---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 03-01-2003 à 16:34:10    

vu que tu fais des ping, ca influe un poil sur le temps dexec.
noublie pas le unset sinon, tu regardes toujours le resultat du premier ping car les differents exec ping sont rajoutés a la fin de $ping.
 
 [:nemesis7]

Reply

Marsh Posté le 03-01-2003 à 16:38:14    

beleg a écrit :

vu que tu fais des ping, ca influe un poil sur le temps dexec.
noublie pas le unset sinon, tu regardes toujours le resultat du premier ping car les differents exec ping sont rajoutés a la fin de $ping.
 
 [:nemesis7]  


 
en fait j'ai pas besoin des temps d'execution, je regarde juste k'activité de la machine (0% ou 100% de perte du packet envoyé)
 
j'ai pas mis le unset() mais ca a l'air de fonctionner correctement quand je met une ip non-pingable , elle s'affiche en blanc alors ke les autre sont Ok
 
tout m'a l'air bon pour le moment  :hello:


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 03-01-2003 à 16:39:58    

raph93 a écrit :

:bounce:
 
apres de nombreux test ta methode affiche un temps d'execution > 1 minutes , je gardes donc ta methode  :jap:  


 
j'ai marqué n'importe quoi  :pt1cable:  
 
je rectifie :  
 
apres de nombreux test ta methode affiche un temps d'execution < 1 seconde , je gardes donc ta methode  :jap:  


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 03-01-2003 à 16:53:40    

curieux, je maintiens pr le unset comme testé ici :
 
http://nosgoth.dyndns.org/test/test.php
 

Code :
  1. <?php
  2. exec("ping -n 1 www.google.fr", $ping);
  3. echo "<hr>www.google.fr : ";
  4. $val = $ping[6];
  5. if (ereg(" 0%" , $val) == TRUE) {
  6.     echo 'UP'; }
  7. else {
  8. echo 'DOWN'; }
  9. exec("ping -n 1 www.gooogle.fr", $ping);
  10. echo "<hr>www.gooogle.fr : ";
  11. $val = $ping[6];
  12. if (ereg(" 0%" , $val) == TRUE) {
  13.     echo 'UP'; }
  14. else {
  15. echo 'DOWN'; }
  16. unset($ping);   
  17. exec("ping -n 1 www.gooogle.fr", $ping);
  18. echo "<hr>www.gooogle.fr : ";
  19. $val = $ping[6];
  20. if (ereg(" 0%" , $val) == TRUE) {
  21.     echo 'UP'; }
  22. else {
  23. echo 'DOWN'; }
  24. exec("ping -n 1 www.google.fr", $ping);
  25. echo "<hr>www.google.fr : ";
  26. $val = $ping[6];
  27. if (ereg(" 0%" , $val) == TRUE) {
  28.     echo 'UP'; }
  29. else {
  30. echo 'DOWN'; }
  31. ?>


 
http://nosgoth.dyndns.org/test/test.php

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed