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 :

renommer des images déjà uploadées à partir d'un fichier excel en php


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 107
    Points : 52
    Points
    52
    Par défaut renommer des images déjà uploadées à partir d'un fichier excel en php
    Bonjour,

    Mon problème est le suivant, après avoir redévelopper une librairie d'images déjà existante, je dois renommer une centaine d'images déjà présentes dans la galerie. Elles portent un nom du type galerie_10.jpg par exemple et je souhaite leur donner un nom personnalisé terminé par un id unique.

    J'ai construis mon fichier excel qui contient le nom actuel de l'image et le nouveau que je souhaite lui donner. Ma question est comment je peux faire cela de façon dynamique avec un code php ?

    Après des recherches, je n'ai pas vraiment trouvé de solution.
    Pouvez-vous me donner des conseils ?

    Merci beaucoup

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme c'est un coup unique, je ferrai simplement dans mon fichier excel une colonne produisant un tableau PHP de correspondance entre l'ancien et le nouveau nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ="$array['" & A1 & "'] = '"&B1 &"';"
    Ce qui donne donc en valeur par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $array['galerie_10.jpg'] = 'nouveau_nom.jpg';
    Et je colle les cents lignes dans un script PHP.
    Le script PHP parcoure les fichiers et regarde dans le tableau de correspondance quel est le nouveau nom pour le fichier.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Sinon, il faut lire le fichier pour construire le tableau de correspondances (ce sera plus simple si c'est un fichier CSV et non pas un fichier XSLX)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Merci beaucoup pour vos réponses. J'ai construit mon fichier .csv avec deux colonnes, dans la A l'ancien nom de l'image et dans la b, le nouveau. Je ne sais pas comment faire cette réécriture, je peux lire le contenu du fichier mais après comment faire pour lui dire de réécrire les images de upload grace à la colonne B en se référant à la colonne A.

    Code php : 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
     
    $ligne = 1; // compteur de ligne
    $nomFichierActuel = fopen("fichier1.txt", "a+");
    while($tab=fgetcsv($nomFichierActuel,1024,';'))
    //on spécifie une taille arbitraire de 1024 octets pour lire toute la ligne
    {
    $champs = count($tab);//nombre de champ dans la ligne en question
    echo "<b> Les " . $champs . " champs de la ligne " . $ligne . " sont :</b><br />";
    $ligne ++;
    //affichage de chaque champ de la ligne en question
    for($i=0; $i<$champs; $i ++)
    {
    echo $tab[$i] . "<br />";
    }
    }
     
    //////////////////////////////////////
    /* la réécriture mais là je ne sais pas comment faire... */
     
    $nomFichierActuel = "fichier1.txt";
    $NewNomFichier = "fichier2.txt";
    rename($nomFichierActuel, $NewNomFichier) ;


    J'avais testé ce code mais ça ne marche pas, le fichier export.csv contient les deux colonnes.

    Code php : 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
     
    $fichier = "export.csv";
    $fic = fopen($fichier, 'rb');
     
    for($ligne = fgetcsv($fic, 1024); !feof($fic); $ligne = fgetcsv($fic, 1024)) {
     
    	$j = sizeof($ligne);
    	for ($i = 0; $i < $j; $i++) {
    		list($html,$jpg) = explode(';',$ligne[$i]);
    			if($jpg){
    				if (file_exists('upload/'.$jpg)) {
    				rename("upload/".$jpg, "upload/".$html.".jpg");
    					 }
    			}
    	 }
    }

    Merci

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    Dans ce genre de script, les chemins posent souvent problème. Et selon l'environnement, les noms peuvent être sensibles à la casse.
    Après le "ca ne marche pas" faut creuser un peu.
    La méthode la plus simple c'est de mettre des echo un peu partout pour voir ce qui se passe.

    Pour lire un fichier ligne par ligne, la fonction file est plus facile à utiliser

    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
     
    echo "dossier courant : ".getcwd()."<br>"; 
    $lignes = file('monfichier.csv');
     
    echo "<pre>";
    print_r($lignes); // 1ere verif : tu dois voir le contenu de ton csv
    echo "</pre>";
     
    foreach ($lignes as $ligne) {
    	list($ancienNom,$nouveauNom ) = implode(';',$ligne); 
    	echo "$ancienNom renomme en $nouveauNom : "; // 2eme verif : tu dois voir les colonnes bien séparées
    	if (file_exists('upload/'.$ancienNom )) {
                     // si on arrive ici, on est sur la bonne voie. sinon, probleme de dossier ou de casse
    				// remplacer false par true si la 2eme verif est ok
    		if ( false && rename("upload/".$ancienNom , "upload/".$nouveauNom.".jpg") ) {
    			echo " -> ok<br>";
    		} else {
    			echo " -> pas renomme<br>";
    		}; 
    	} else {
    	echo " -> ancien n existe pas<br>";
    	}
    }

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Merci beaucoup pour ton aide, je creuse mais ce n'est pas toujours simple tout seul...
    Le contenu de mon fichier s'affiche bien avec les deux colonnes bien séparées dans l'array, après le renommage ne se fait pas, j'ai essayé de changer les chemins, j'ai une erreur sur cette ligne :

    J'ai un souci avec la fonction implode, j'ai cette erreur qui revient :
    Warning: implode() [function.implode]: Invalid arguments
    sur cette ligne :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    list($colonne1,$colonne2 ) = implode(';',$ligne);


  7. #7
    Membre du Club
    Homme Profil pro
    Formation Cnam
    Inscrit en
    Octobre 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Formation Cnam

    Informations forums :
    Inscription : Octobre 2015
    Messages : 27
    Points : 50
    Points
    50
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     
    $export = fopen("export.csv", "r");
    while($tab=fgetcsv($export,1024,';'))
    //on spécifie une taille arbitraire de 1024 octets pour lire toute la ligne
    { 
        rename($tab[0],$tab[1]);
     
    }

    Essaie ça je suis pas sur

    avec $export = ton fichier csv avec la liste à 2 colonnes

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    Citation Envoyé par LiliValerie Voir le message
    Merci beaucoup pour ton aide, je creuse mais ce n'est pas toujours simple tout seul...
    Le contenu de mon fichier s'affiche bien avec les deux colonnes bien séparées dans l'array, après le renommage ne se fait pas, j'ai essayé de changer les chemins, j'ai une erreur sur cette ligne :

    J'ai un souci avec la fonction implode, j'ai cette erreur qui revient : sur cette ligne :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    list($colonne1,$colonne2 ) = implode(';',$ligne);

    Explode au lieu d'implode

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 107
    Points : 52
    Points
    52
    Par défaut
    Merci beaucoup pour votre aide, voici le code qui fonctionne avec l'explode et un "rtrim" qui supprime les espaces (ou d'autres caractères) de fin de chaîne pour récupérer le fichier :

    Code php : 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
     
    echo "dossier courant : ".getcwd()."<br>";
    $lignes = file('export.csv');
     
    echo "<pre>";
    print_r($lignes); // 1ere verif : voir le contenu du csv
    echo "</pre>";
     
     
    	foreach ($lignes as $ligne) {
    	list($ancienNom,$nouveauNom ) = explode(';',$ligne); 
    	echo "$ancienNom renomme en $nouveauNom : "; // 2eme verif : voir les colonnes bien séparées
    	if (file_exists('upload/'.$ancienNom )) {
                     // bonne voie sinon, probleme de dossier ou de casse
    				// remplacer false par true si la 2eme verif est ok
    		if ( true && rename("upload/".rtrim($ancienNom) , "upload/".rtrim($nouveauNom).".jpg") ) 				
     
    		{
    			echo " -> ok<br>";
    		} else {
    			echo " -> pas renomme<br>";
    		}; 
    	} else {
    	echo " -> ancien n existe pas<br>";
    	}
    }

    Bonne journée

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

Discussions similaires

  1. [AC-2007] Implémentation des tables sous Access à partir d'un fichier EXCEL
    Par SOFIC dans le forum VBA Access
    Réponses: 1
    Dernier message: 14/06/2015, 09h10
  2. [TinyMCE] lien des images et upload d'image
    Par swissmade dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 27/05/2010, 15h01
  3. Réponses: 1
    Dernier message: 29/01/2007, 20h22
  4. [Upload] Renommer des images à la volée
    Par Darth Lord dans le forum Langage
    Réponses: 6
    Dernier message: 14/06/2006, 15h13
  5. Renommer des images en php
    Par Le Mage Noir dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2006, 12h33

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