IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Script de dédoublonnage


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2012
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2012
    Messages : 109
    Points : 47
    Points
    47
    Par défaut Script de dédoublonnage
    bonjour
    y a t-ils quelle qu'un pour m'aider a terminer mon script qui sera utilisée pour faire du déboulonnage de fichier selon le contenu de la premier ligne de chaque fichier.
    voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?php
     
    $a      = 1;
    $b      = 1;
    $ligne1 = array();
    $ligne2 = array();
    $jh = 1;
    while (file_exists("lesform/form" . $jh . ".txt")) {
        $jh++;
    }
    $jh--;
     
    while ($a < $jh) {
        $body1    = fopen("lesform/form" . $a . ".txt", "r");
        $ligne1[] = fgets($body1, 5000);
        $a++;
    }
     
    while ($b < $jh) {
        $body2    = fopen("lesform/form" . $b . ".txt", "r");
        $ligne2[] = fgets($body2, 5000);
        $b++;
    }
    $c        = 0;
    $d        = 1;
    $e        = 1;
    $nbra     = count($ligne1);
    $nbrb     = count($ligne2);
    while ($c < $nbra) {
        $d = 1;
        while ($d < $nbra) {
            if (!preg_match_all("#" . $ligne1[$d] . "#", $ligne2[$c], $resultat))
            {
                $e++;
                //if ($ligne1[$c] != $ligne2[$d]){
                echo "OK";
                $file     = file_get_contents("lesform/form" . $d . ".txt");
                $fichierR = fopen("fichierdeboulonner/form" . $d . ".txt", "w+");
                fwrite($fichierR, $file);
                fclose($fichierR);
                $file     = "";
            }
            $d++;
        }
        $c++;
    }
    ?>
    merci !

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    Au risque de passer pour un imbécile , c'est quoi du déboulonnage de fichier ?

    En gros que cherche tu a faire ?

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Ne serait-ce pas plutôt du "dédoublonnage" ?

  4. #4
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2012
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2012
    Messages : 109
    Points : 47
    Points
    47
    Par défaut
    bonjour

    ce que j'essaye de faire depuis le début

    c'est un script qui supprimer les fichiers qui sont en double.

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    Est ce que deux fichier ayants la même première ligne mais le reste du contenu différents doivent être vu comme des doublons ou alors tu cherche simplement à supprimer deux fichiers ayant le même contenu ?

    Si il sagit simplement de supprimer les fichiers en double , quelque chose comme ça devrait faire le job :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $folder = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/var/mon/dossier/'), true);
    $verified = array();
    $toDelete = array();
    foreach($folder as $file)
    {
       if($file->isFile())
       {
           $fichier = $file->getPath().DIRECTORY_SEPARATOR.$file->getFileName();
           $md5 = md5_file($fichier);
           if(!in_array($md5,$verified))
               $verified[$fichier] = $md5;
           else
               $toDelete[] = $fichier; 
       }
    }
     
    var_dump($toDelete);
    Il est évidement possible de remplacer $toDelete[] = $fichier; par un unlink

  6. #6
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2012
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2012
    Messages : 109
    Points : 47
    Points
    47
    Par défaut
    salut

    ton code source est très compliquée a comprendre.



    je n'arrive pas a recupper le texte de chaque fichier.

  7. #7
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2012
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2012
    Messages : 109
    Points : 47
    Points
    47
    Par défaut
    re re bonjour

    pourrais tu me donnais quelle que explication de ce code source.

    par exemple var_dump () est une fonction pour connaitre la structure de la variable ??

    c'est quoi la classe instancier RecursiveIteratorIterator
    j'ai trouver dans php.net que md5_file() permet de calculer le md5 d'un fichier
    mes cette explication ne veut rien dire pour moi.
    md5 c'est quoi ?

    merci d'avance pour les explication

  8. #8
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Un peu de recherche, ça sert toujours :

    => http://fr2.php.net/var_dump
    "Affiche les informations d'une variable"

    => http://fr2.php.net/RecursiveIteratorIterator
    "Peut être utilisé pour itérer sur des itérateurs, récursivement."

    => http://fr.wikipedia.org/wiki/MD5

  9. #9
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2012
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2012
    Messages : 109
    Points : 47
    Points
    47
    Par défaut
    merci pour les liens.

    la variable $verified ne serre a rien dans la fonction in_array();

    Non ?

    comment faire pour récupérer non pas les fichier en double mes
    les fichier qui ne sont pas ont double.

    voila ma modification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <?php
    $folder = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('./lesform/'), true);
    $verified = array();
    $toDelete = array();
    $lesform = array();
    foreach($folder as $file)
    {
       if($file->isFile())
       {
           $fichier = $file->getPath().DIRECTORY_SEPARATOR.$file->getFileName();
           $md5 = md5_file($fichier);
           if(!in_array($md5,$verified)){
               $verified[$fichier] = $md5;
    $lesform[] = $fichier;
    		   }
    		   else {
     
     $toDelete[] = $fichier; 
    }
    		   }
    }
    foreach ($lesform as $fa){
    echo $fa."<br>";
     
    } 
    //var_dump($toDelete);
    var_dump($verified);
     
    ?>

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    Le code commenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    //Création d'un RecursiveIteratorIterator qui permet de parcourir toute une arboresence
    $folder = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/var/mon/dossier/'), true);
     
    //Va contenir tous les fichiers "vérifiés"
    $verified = array();
     
    //Va contenir tous les fichiers qui sont détectés comme des doublons
    $toDelete = array();
     
    //Itération sur tous les éléments du dossier
    foreach($folder as $file)
    {
       //Si l'élément est un fichier
       if($file->isFile())
       {
           //Chemin complet vers le fichier
    	   $fichier = $file->getPath().DIRECTORY_SEPARATOR.$file->getFileName();
    	   //Création d'une empreinte md5 propre au fichier. Deux fichiers identique on la même empreinte
           $md5 = md5_file($fichier);
     
    	   //Si l'empreinte n'a jamais été vu , on l'enregistre
           if(!in_array($md5,$verified))
               $verified[$fichier] = $md5;
    	   //Sinon c'est un doublon.
           else
               $toDelete[] = $fichier; 
       }
    }
     
    //Affichage du contenu des doublons 
    var_dump($toDelete);
    ton code source est très compliquée a comprendre.
    17 lignes , une boucle vs 47 lignes et plusieurs bouvles imbriqué , entre nous je suis pas sur que mon code sois le plus compliqué à comprendre ^^
    Après que tu ne connaisse pas les fonctions utilisées c'est autre chose

    je n'arrive pas a recupper le texte de chaque fichier.
    Pas besoin, une empreinte md5 permet d'avoir l'empreinte numérique d'un fichier. Deux fichiers au contenu identique donneront la même empreinte.

    comment faire pour récupérer non pas les fichier en double mes
    les fichier qui ne sont pas ont double.
    Tous les fichiers sauf les doubles sont dans $verified. Si tu veux vraiment les fichiers qui n'ont pas de double du tout faut bidoullier un peu

  11. #11
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2012
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2012
    Messages : 109
    Points : 47
    Points
    47
    Par défaut
    salut

    il ne me reste plus que 1 probleme pour récupérer le nom de chaque fichier

    j'ai essaye ce code mes ça ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach ($verified as $gg){
    echo $gg."<br>";
    }
    merci

  12. #12
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2012
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2012
    Messages : 109
    Points : 47
    Points
    47
    Par défaut
    pourquoi la boucle foreach $verified as $gg

    me donne comme resutat un code insignifiant et comme récupérer les données de la variable $verified.
    voici le résultat de ma boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    61bfb994253266f5e242bc924cfb78c0
    f806e80ba156b199d22a941b523ea37a
    ed9fd31a8d8705091847a005c7b4086a
    aafc13679bf7c71a497ccfa1a97c038d
    8035a6a0bd74df5edd0c7c852e7272de
    5ea46e830e0f950dfcd4200d440bb3d9
    19b0836e5a075a763557d96f7cfc6da6
    ac8a5feca664fd0ddf1666bf6bb923cf
    888d958171c81220337092e17cd22fc3
    9e4991ca91660e2eff2b8ac21c3e042d
    2d43d98e25646acd6c1ba98ea71f12dd
    7802e638f6e3007669425eb4e6dfed0c
    42e2362d48cbb4577717b5e7bfaaabca
    e81e73f510ebef676c00d57901b70d45
    59f33cb5694b610bd9c6bf46af1943ab
    4b546052bebf6dee952e811186b01fa3
    9aa7cbfd51a7168c924bbb24d394bd2f
    f77d0fbac812d55c9ba4ddae8333c4b6
    52c4d0ea29697a831e9f8daa988e7499
    merci

  13. #13
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    $verified est un tableau dont les clés sont les noms de tes fichiers, et les valeurs sont leur correspondance en md5.
    Essaies donc plutôt une méthode comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $files = array_keys($verified);
    echo implode('<br />', $files);

  14. #14
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($verified as $nom_fichier => $md5){
    echo $nom_fichier."<br>";
    }
    Pour le pourquoi du comment , voir le message précédent de k'amm

  15. #15
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2012
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2012
    Messages : 109
    Points : 47
    Points
    47
    Par défaut
    je viens de terminer une partie du code.
    il ne me reste plus ka enregistrer les données dans des fichier texte

    voici le code je ne sais pas si c'est correct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <?php
    //Création d'un RecursiveIteratorIterator qui permet de parcourir toute une arboresence
    $folder = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('lesform/'), true);
    //Va contenir tous les fichiers "vérifiés"
    $verified = array();
    //Va contenir tous les fichiers qui sont détectés comme des doublons
    $toDelete = array();
    $LesForms = array();
    //Itération sur tous les éléments du dossier
    foreach($folder as $file)
    {
    //Si l'élément est un fichier
       if($file->isFile())
       {
       //Chemin complet vers le fichier
           $fichier = $file->getPath().DIRECTORY_SEPARATOR.$file->getFileName();
        //Création d'une empreinte md5 propre au fichier. Deux fichiers identique on la même empreinte
    		$md5 = md5_file($fichier);
    //Si l'empreinte n'a jamais été vu , on l'enregistre     
    	 if(!in_array($md5,$verified)){
               $verified[$fichier] = $md5;
    		   $LesForms [] = str_replace ("lesform\\", "", $fichier);
     
    		   //Sinon c'est un doublon.
           }
    	   else {
               $toDelete[] = $fichier; 
    		   }
       }
    }
     
    //var_dump($verified);
     
     
    foreach ($LesForms as $nom_fichier){
    echo $nom_fichier."<br>";
    $fileL = file_get_contents ("lesform/".$nom_fichier);
    $fileR = fopen ("fichierdeboulonner/".$nom_fichier, "a+");
    fwrite ($fileR, $fileL);
    fclose ($fileR);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  2. Script et XMLmodule
    Par Ph. B. dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/01/2003, 16h10
  3. quel langage choisir pour faire de script sous windows
    Par pas05 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/11/2002, 22h42
  4. Réponses: 2
    Dernier message: 11/07/2002, 08h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo