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 :

Modification nom fichiers


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut Modification nom fichiers
    Bonjour,

    Dans un répertoire C:\wamp\www\projet\couvertures, je possède des centaines d'images dont je souhaiterais modifier le nom. Les modalités de modification seraient les suivantes :

    1) j'ai un fichier "nom_original.csv" qui liste tous mes images présentes dans le répertoire :

    ID; nom_fichier_original
    1; fichier1.jpg (nom générique pour l'exemple)
    2; fichier2.jpg
    3; fichier3.jpg
    etc

    2) j'ai un 2nd fichier "nom_modifié.csv" qui comporte les nouveaux noms que je souhaiterais allouer à mes images

    ID; nom_fichier_NOUVEAU
    1; nouveau_nom.jpg
    2; un_autre_nouveau_nom.jpg
    3; encore_un_autre.jpg
    etc

    Est-il possible de renommer toutes mes images (situées dans le répertoire C:\wamp\www\projet\couvertures) en référence aux nouveaux noms listés dans le 2nd fichier ? Merci.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 224
    Points
    8 224
    Billets dans le blog
    17
    Par défaut
    Oui c'est tout à fait possible

    Fonction PHP rename( )
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Merci. Il faut donc que je passe par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php rename(nom_depart, nom_nouveau); ?>
    Si je comprends bien, dans mon cas, je dois d'abord ouvrir mon fichier "nom_original.csv" pour récupérer les anciens noms avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $oldname  = fopen('nom_original.csv', 'r');
    puis lire toutes les lignes de ce fichier en faisant une boucle sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ligne_oldname = fgets($nom_original.csv);
    Puis je procède de la même façon pour récupérer les nouveaux noms dans le fichier "nom_modifié.csv".
    Mais comme je suis débutant, je ne sais pas comment articuler tout cela avec la fonction rename... Pouvez-vous m'aider ? Merci.

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 224
    Points
    8 224
    Billets dans le blog
    17
    Par défaut
    Montre tes tentatives qu'on puisse voir ce qui bloque.

    Pour info il existe fgetcsv( ) qui permet d'obtenir directement les valeurs du .CSV ligne par ligne sans traitement de ta part.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Voilà ma tentative infructueuse. Mon fichier rename.php contient le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    $fichierOrigin = fopen('couv_essai/old.csv', 'r'); //
    $newNames = fopen('couv_essai/new.csv', 'r'); //
     
    while(!feof($fichierOrigin))
    {
       $oldName = fgets($fichierOrigin); 
       $newName = fgets($newNames); 
     
       rename($oldName, $newName); 
       echo 'Fichier ' . $oldName . ' renomme en ' . $newName . '<br />';
    }
    ?>
    Les erreurs suivantes me sont retournées (2 fichiers à renommer) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Warning: rename(Cadresnoirs15991_f.jpg ,new_cadresnoirs ) [function.rename]: La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte. (code: 123)
    Warning: rename(Cequelejourdoitalanuit15739_f.jpg ,new_cequelejour ) [function.rename]: La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte. (code: 123) 
    Warning: rename(,) [function.rename]: Invalid argument in C:\wamp\www\essais_livre_zero\phase7\RENAME.php on line 10
    Les fichiers sont bien ouverts mais la fonction rename ne reçoit aucun argument. Voyez-vous où est le problème ? Peut-être faut-il passer par fgetcsv( ) mais comment ? Merci.

    PS : mes fichiers csv ne contiennent plus que le nom des images (il n'y a plus l'ID).

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 224
    Points
    8 224
    Billets dans le blog
    17
    Par défaut
    PS : mes fichiers csv ne contiennent plus que le nom des images (il n'y a plus l'ID).
    Ce qui implique donc que les fichiers sont triés, contiennent le même nombre de lignes. Confirmes-tu ?
    Tu te retrouves avec une valeur par ligne, s'agit-il encore réellement de CSV ? Le " est-il utilisé comme délimiteur de valeur ?

    Je pourrai t'aider après réponse à ses questions.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Absolument, les 2 listes sont "symétriques" : même ordre et même nombre de lignes. Effectivement, vu qu'il n'y a plus d'ID, l'utilité d'un fichier csv ne se justifie plus. Je pourrais donc partir sur des fichiers .txt avec une valeur par ligne ?
    Merci de ton intérêt.

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 224
    Points
    8 224
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par almoha Voir le message
    Je pourrais donc partir sur des fichiers .txt avec une valeur par ligne ?
    Oui, auquel cas tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $old_names = file('noms_originaux.txt') ;
    $new_names = file('noms_modifiés.txt') ;
     
    foreach ( $old_names as $i => $old_name ) {
        rename('/path/to/old/' . $old_name, '/path/to/new/' . $new_names[$i]) ;
    }
    ... mais ce serait encore plus fiable si tu pouvais mettre anciens et nouveaux noms côte à côte dans le même fichier àmha.

    Au fait, pense à sauvegarder tes fichiers avant toute manipulation, risque de perte de données important.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Ok, je vais essayer ta méthode (sur une copie de mes images). Mais comme je maîtrise la structure de mes fichiers, je peux, comme tu le suggères, mettre côte à côte anciens et nouveaux noms dans un même fichier. Dans ce cas là, je dois donc me baser sur un fichier csv avec comme séparateur le ; ? Si c'est le cas, comment se déroule ensuite le traitement php permettant le rename final ? Merci encore.

  10. #10
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 224
    Points
    8 224
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par almoha Voir le message
    je peux, comme tu le suggères, mettre côte à côte anciens et nouveaux noms dans un même fichier. Dans ce cas là, je dois donc me baser sur un fichier csv avec comme séparateur le ; ?
    Oui pourquoi pas.
    CSV : séparateur de valeurs , ( ; est pour la localisation française de Excel) et délimiteur "

    Si c'est le cas, comment se déroule ensuite le traitement php permettant le rename final ?
    C'est le même. La seule différence est que tu récupéres les valeurs ligne par ligne avec fgetcsv( )
    Des exemples d'utilisation : http://fr.php.net/fgetcsv
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Merci pour ces précisions. Je suis en train de tester la 1ere méthode. Je suis en localhost. Mon fichier php, mes fichiers txt et mes images sont situés dans le même dossier : couv_essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C:\wamp\www\projet\essai\couv_essai
    J'ai donc repris ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    $old_names = file('old.csv') ;
    $new_names = file('new.csv') ;
     
    foreach ( $old_names as $i => $old_name ) {
        rename($old_name, $new_names[$i]) ;
     
    }
    ?>
    Mais j'ai les erreurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Warning: rename(Cadresnoirs15991_f.jpg ,new_cadresnoirs.jpg ) [function.rename]: La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte. (code: 123)
    Warning: rename(Cequelejourdoitalanuit15739_f.jpg ,new_cequelejour.jpg ) [function.rename]: La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte. (code: 123)
    Peux-tu m'aider à trouver ce qui cloche ? Merci.

  12. #12
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 224
    Points
    8 224
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: rename(Cadresnoirs15991_f.jpg ,
    Il y a un espace entre le nom du fichier et la virgule du msg d'erreur... Ah oui, ça doit être le retour à la ligne conservé par file( ).

    Fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ( $old_names as $i => $old_name ) {
        rename(rtrim($old_name), rtrim($new_names[$i])) ;
    }
    Sinon pour éviter rtrim( ) file( ) accepte un flag FILE_IGNORE_NEW_LINES

    http://fr.php.net/manual/en/function.file.php
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Super Séb. cela fonctionne parfaitement. Merci de ton aide

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

Discussions similaires

  1. Modification noms de fichiers erronés
    Par klef63 dans le forum VBScript
    Réponses: 11
    Dernier message: 05/01/2011, 10h54
  2. Modification nom de fichier
    Par rookie_shell dans le forum Linux
    Réponses: 2
    Dernier message: 25/05/2009, 16h11
  3. Concatener la date au du nom fichier
    Par peppena dans le forum Linux
    Réponses: 5
    Dernier message: 09/02/2009, 12h53
  4. Modification nom de fichier dans macro
    Par gueyou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/07/2008, 15h48
  5. modification de fichier EOF
    Par scorbo dans le forum C
    Réponses: 9
    Dernier message: 28/11/2003, 11h35

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