[Résolu]Boucle et lecture de fichiers...

Boucle et lecture de fichiers... [Résolu] - PHP - Programmation

Marsh Posté le 26-04-2007 à 14:38:27    

Hop tout d'abord voici le code qui pose problème :
 

Code :
  1. <?php
  2. // Teste l'existence du fichier nmapIP1 et l'ouvre s'il existe
  3. $file = './tmp/nmapIP1';
  4. if (file_exists($file))
  5. {
  6. $fp = fopen($file, "r" );
  7. }
  8. else
  9.         {
  10. echo "Fichier introuvable ! ";
  11.         }
  12. // Ouvre le fichier nmapIP2
  13. $fichiertableau = './tmp/nmapIP2';
  14. $fp2 = fopen($fichiertableau,"w" );
  15. while (!feof($fp))  // On parcourt nmapIP1
  16. {
  17. $ligneIP = fgets($fp,4096); // On relève ligne par ligne
  18. while (!feof($fp2))  // On parcourt nmapIP2
  19.  {
  20.  echo "Coucou";
  21.                 $tableau = fgets($fichiertableau,4096); // On relève ligne par ligne
  22.  if (strcmp($tableau,$ligneIP) != 0) // On compare une ligne de nmapIP1 à toutes celles de nmapIP2
  23.  {
  24.  fwrite($fp2,$ligneIP); // Si les lignes sont différentes, on écrit la nouvelle IP dans nmap IP2
  25.  }
  26.  }
  27. }
  28. // Servira à compter le nombre d'IP maximal relevé
  29. //if (file_exists($fichiertableau))
  30. // {
  31. // $tab = file($fichiertableau);
  32. // $nb = count ($tab);
  33. // echo $nb;
  34. // }
  35. //else
  36. // {
  37. // echo "Erreur" ;
  38. // }
  39. ?>


 
Maintenant j'explique ce que je veux faire  :) . J'ai récupérer grace à NMAP une liste d'IP dans le fichier nommé nmapIP1. Je souhaite comparer celui-ci à celui appelé nmapIP2 et, si une IP n'est pas présente dans ce-dernier, la rajouter. Mais lorsque j'exécute le script en le lançant avec Firefox, j'ai une sorte de boucle infinie qui plante quasiment le navigateur et lorsque j'ouvre nmapIP2, il contient la première adresse IP du fichier nmapIP1 et ce, en très grande quantité  :whistle:  
De plus, en essayant de créer le fichier nmapIP2 avant l'exécution, je vois que les IP présentes dans le fichier sont écrasées...
Alors je sollicite votre aide pour savoir d'où vient l'erreur et si je peux faire ce que je veux faire d'une avec du php et deux si ma piste semble la bonne...(je suis débutant en php :D )
 
 
Merci d'avance...
 
PS : Le fichier nmapIP2 est crée par le script, il est donc vide lors du premier parcours par la boucle.
 
EDIT : Merci pour vos conseils, tout marche à la perfection  :jap:

Message cité 1 fois
Message édité par Joker28 le 10-05-2007 à 16:10:10
Reply

Marsh Posté le 26-04-2007 à 14:38:27   

Reply

Marsh Posté le 26-04-2007 à 15:57:17    

effectivement, pas terrible ta boucle
 

Joker28 a écrit :

Maintenant j'explique ce que je veux faire  :) . J'ai récupérer grace à NMAP une liste d'IP dans le fichier nommé nmapIP1. Je souhaite comparer celui-ci à celui appelé nmapIP2 et, si une IP n'est pas présente dans ce-dernier, la rajouter.

ce que je ferais :
- lecture du premier fichier et création d'un 1er tableau d'ip
- lecture du second fichier et création d'un 2eme tableau d'ip
- ajout dans le 2ème tableau des ip manquantes
- réecriture du 2ème fichier
 

Joker28 a écrit :

De plus, en essayant de créer le fichier nmapIP2 avant l'exécution, je vois que les IP présentes dans le fichier sont écrasées...

relis la doc tu comprendras : http://fr.php.net/fopen
 

Joker28 a écrit :

PS : Le fichier nmapIP2 est crée par le script, il est donc vide lors du premier parcours par la boucle.

donc tu pourrais simplement copier le contenu de nmapIP1 dans nmapIP2, non ?  :whistle:  

Reply

Marsh Posté le 27-04-2007 à 09:53:14    

Merci beaucoup pour ta réponse qui m'a bien aidé  :)  
 
J'ai repris tout ça ce matin et voilà mon nouveau code :
 

Code :
  1. <html>
  2. <head>
  3. <title>Gestion des adresses IPs</title>
  4. </head>
  5. <body>
  6. <h1>Bienvenue dans le programme de gestion des adresses IPs</h1>
  7. <?php
  8. $file = './tmp/nmapIPXXXX';
  9. if (file_exists($file))
  10. {
  11. $fp = fopen($file, "r" );
  12. $tab = file($file);
  13. $nb = count($tab);
  14. //echo "$nb <br>";
  15. }
  16. else
  17.         {
  18.         echo "Fichier introuvable 1! ";
  19.         }
  20. $fichiertableau = './tmp/nmapIPTABXXXX';
  21. if (file_exists($fichiertableau))
  22. {
  23. $fp2 = fopen($fichiertableau,"a+" );
  24. $tab2 = file($fichiertableau);
  25. $nb2 = count ($tab2);
  26. //echo "$nb2 <br>";
  27. }
  28. else
  29.         {
  30.         echo "Fichier introuvable 2! ";
  31.         }
  32. for ($i=0; $i<$nb; $i++)
  33. {
  34. for ($j=0; $j<$nb2; $j++)
  35.  {
  36.  if ($tab[$i] == $tab2[$j])
  37.   {
  38.   break;
  39.   }
  40.  else
  41.   {
  42.   $nb3 = count($tab2);
  43.   if ($j == $nb3-1)
  44.    {
  45.    fwrite($fp2,$tab[$i]);
  46.    }
  47.   }
  48.  }
  49. }
  50. $nbtotal = count($tab2);
  51. echo "Le nombre maximal d'adresses IP relevées dans le sous-réseau XXXX est de $nbtotal";
  52. fclose($fp);
  53. fclose($fp2);
  54. ?>
  55. </body>
  56. </html>


 
Alors si ça peut résoudre les problèmes de quelqu'un d'autre, ce code fonctionne parfaitement  :)  
Néanmoins, j'aimerais appliquer ce script à plusieurs fichiers contenant des adresses IP (correspondant à chaque sous-réseau) situés dans un même répertoire.
En gros, il faudrait que je passe en paramètre le nom de chaque fichier qui m'intéresse dans le répertoire mais je ne sais pas comment récupérer une liste de nomns de fichiers pour les repasser en paramètres...
Si quelqu'un peut me donner une piste, ça serait sympa  :)  
 
Merci d'avance

Reply

Marsh Posté le 27-04-2007 à 10:23:09    

pas besoin de la 2ème boucle ligne 38
 
un peu de lecture :
http://fr.php.net/in_array
http://fr.php.net/glob


Message édité par soju le 27-04-2007 à 10:23:26
Reply

Marsh Posté le 27-04-2007 à 14:24:40    

Encore une fois merci, j'vais regarder ça  :jap:

Reply

Marsh Posté le 27-04-2007 à 17:46:48    

Tu fais un array_diff($tab, $tab2).
 
Ça te donne toutes les valeurs de $tab qui ne sont pas dans $tab2


---------------
Gamertag: CoteBlack YeLL
Reply

Sujets relatifs:

Leave a Replay

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