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 :

comparaison de fichier


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de zugolin
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 267
    Points : 164
    Points
    164
    Par défaut comparaison de fichier
    bonjour,
    je cale un peu sur un while .... ou un for ......

    je parcoure un dossier pour que, tant que mon fichier a le même nom qu'un fichier déjà existant, je le renomme
    ex:
    mon fichier à uploader : "image.jpg"
    mes fichiers présents :"image.jpg","1image.jpg","prout.jpg"
    étant donné que je veut rajouter un chiffre devant le fichier, il devrait donc, au final, s'appeler "2image.jpg"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     for ($i=0;$filename==$lejpg;$i++) { 
      $i.$lejpg;     
    	}
    voila,
    en fait, je n'arrive pas a m'imaginer la façon de faire ... c'est plutôt ça , le problème ....

    merci d'avance pour un piti coup de pouce

  2. #2
    Membre averti Avatar de FredPsy
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Décembre 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 285
    Points : 342
    Points
    342
    Par défaut
    Bonsoir.

    Est ce que tu peux mettre ton code, ça sera plus simple.
    Sinon pour une boucle for, c'est plus comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for($i = 0; $i < 20; $i++)
      {
          echo $i."<br />";
      }

  3. #3
    Membre habitué Avatar de zugolin
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 267
    Points : 164
    Points
    164
    Par défaut
    alors, voila !
    j'avance un peu quand même ......
    je sais pas si ma solution est très "respectueuse" ... mais j'en ai trouvé une ;
    par contre j'ai encore un soucis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $filename ='/home/monsite/images/'.$lejpg;   
     
    	   $i=1;
    	  while (file_exists($filename)) { 
    	  $lejpg=$i.$lejpg; 
              $i++; 
    	  $filename =DIR.$lejpg;
    	  if(!file_exists($filename)) 
                                    { break; }
      						 }
    copy($_FILES['zimage']['tmp_name'],$lerep.$lejpg);
    echo "<center><b>Image copiée !</b></center> ";
    comme ça, ça fonctionne, mais ça incrémente pas comme je veux


    oups....pas fini....et j'ai validé ....vite, je re-édite

    mon image "image.jpg" : existe déjà; 1image.jpg aussi alors, elle s'appelle "21image.jpg" ...
    et si je recommence, la suivante s'appelle "321image.jpg" ..... "4321image.jpg" etc .....
    ça m'arrange pas trop , ça ......

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Points : 550
    Points
    550
    Par défaut
    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
     
    $filename ='/home/monsite/images/'.$lejpg;   
    $lejpg_raw = $lejpg;
    $i=1;
    while (file_exists($filename)) { 
        $lejpg=$i.$lejpg_raw; 
        $i++; 
        $filename =DIR.$lejpg;
        if(!file_exists($filename)) {
            break;
        }
    }
    copy($_FILES['zimage']['tmp_name'],$lerep.$lejpg);
    echo "<center><b>Image copiée !</b></center> ";

  5. #5
    Membre habitué Avatar de zugolin
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 267
    Points : 164
    Points
    164
    Par défaut
    super !! merci, ça marche !!

    et j'ai rajouté une bricole :
    plutot que faire "1image.jpg","2image.jpg","3image.jpg" , je fais image1.jpg, image2.jpg, etc ...

    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
     
    $filename =DIR.$lejpg;   //DIR='/home/monsite/images/
    // je recupere l'extension, puis, le nom 'brut'
    $ext = strtolower(substr($lejpg, strrpos($lejpg, '.') + 1));
    $lejpg_raw = explode('.', $lejpg);
     
    $i=1;
    while (file_exists($filename)) { 
     
        $lejpg=$lejpg_raw[0].$i.'.'.$ext; 
        $i++; 
        $filename =DIR.$lejpg;
        if(!file_exists($filename)) {
            break;
        }
    }
    copy($_FILES['zimage']['tmp_name'],$lerep.$lejpg);
    echo "<center><b>Image copiée !</b></center> ";
    .... ah .... je m'aperçois en même temps que si j'ai un fichier du genre "mon.image.jpg" , ça va merdouiller a cause du point ......

    y'a pas une fonction qui recupere la chaine avant le point de l'extension de fichier....?

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Tu utilises le substr avec le troisième argument négatif ....

    Cad
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    substr( $lejpg, 0, -(strlen($ext)+1) );
    Avec $ext l'extension du fichier lu dans ta boucle.

  7. #7
    Membre habitué Avatar de zugolin
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 267
    Points : 164
    Points
    164
    Par défaut
    eh ben, voila !!
    on y est !!

    merci a vous trois

    alors, maintenant, y'a pas de raison ... a mon tour ... voila le code , qui pourra servir :
    pour uploader et controler/modifier le nom d'un fichier image

    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
     
    $util='/home/'.$_SESSION['utilisateur'].'/www/img/images_fck/';
    define('DIR', $util);
     
     	 if (isset($_FILES['image'])) {
    	 if (!empty($_FILES['image']['name'])) { // inutile de repeter pour cet exemple, mais moi, j'en ai besoin plus tard
    	   if (filesize($_FILES['image']['tmp_name'])>400000) {//on pourrait redimensionner...ce n'est pas mon choix
    		echo 'l\'image est trop lourde (400Ko Maxi),il faut la reduire et recommencer ...</a>';
    					}
    		else {
     $lerep= DIR ; 
          $lejpg=trim($_FILES['image']['name']);//suppr saut de ligne et retour chariot
    	  $jpg_origine=trim($_FILES['image']['name']);//recup du nom d'origine pour une comparaison a la fin
       $lejpg = strtr($lejpg,  "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",  //pas d'accents 
        "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");  
       $lejpg=str_replace(" ","_",$lejpg);  // pas d'espaces
          $lejpg=strtolower($lejpg); // pas de majuscules
    $lejpg = preg_replace("#[&,'\+=\$;!\?\\/]#", "_", $lejpg);// nettoyage supplementaire (tout ce qui est &,'+=$;?\/  )
    $ext = strtolower(substr($lejpg, strrpos($lejpg, '.') + 1));// recup du nom d'extension
       if(($ext=="jpg")||($ext=="jpeg")||($ext=="png")){
    $filename =DIR.$lejpg;   
    $lejpg_raw=substr( $lejpg, 0, -(strlen($ext)+1) );// recup du nom de l'image sans extension
    $lejpg_raw = preg_replace("#\.#", "_", $lejpg_raw);// rempalcement metacaractere "." par "_"
    $i=1;
     //tant que le fichier existe sur le serveur, on renomme le nom(sans extension) de l'image
     // en incrementant un numero
      while (file_exists($filename)) { 
        $lejpg=$lejpg_raw.$i.'.'.$ext; 
        $i++; 
        $filename =DIR.$lejpg;
        if(!file_exists($filename)) {
            break;
        }
    }  
    copy($_FILES['image']['tmp_name'],$lerep.$lejpg);//on copie le fichier avec son nouveau nom
    if ($lejpg!=$jpg_origine){  // si le nom d'origine a été changé, on le précise
    	$new_name="( \"$jpg_origine\" a été renommé en \"$lejpg\" )";} 
    		else { $new_name="";}
    echo '<center><b>Image copiée !</b>'.$new_name.'</center> ';  	   
     
    	}  
    	   else { echo "Ce n'est pas le bon type d'image (type JPG ou PNG seulement) ";    } 
    	   }
    	}	   
    else { echo "<center><b>Pas d'image envoyée !</b></center> "; } 
    	  }
    alors , bien sur , y'a tout un tas de choses qu'on peut faire en plus ...
    personnellement , je fais ça pour des personnes qui sont censé ne pas s'y connaitre en programmation, et le "bidouillage" ne leur seraient d'aucun interet , vu que c'est pour leur backoffice ... par contre, il est plus probable qu'ils m'envoient des fichiers avec des noms exotiques ( "L'image de émile.jpg", par exemple ), et ça , je prefere le corriger ...

    donc, en premier lieu, on pourrait controler le type mime, mais ça pose des problemes en plus...

    on peut aussi redimensionner une image trop grande ;
    je vais voir si je le fait ...
    pour l'instant, je prefere interdire et leur preciser ...
    mais c'est vrai que si c'est des novices, il vaudrait mieux que je le fasse moi meme...
    si ça vous intéresse , voila un code pour redim jpg et png(avec gestion de la transparence) en gardant les proportions d'image
    (du code pioché sur le web + du bidouillage perso)
    (librairie GD necessaire)

    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
     
    	 			  function redim($lejpg,$im_dest) {
                   $size = getimagesize($lejpg);	 
    			   $src_w = $size[0];
                   $src_h = $size[1];
                   $dst_w = 600; // Contraint le rééchantillonage à une largeur fixe
                   $dst_h = round(($dst_w / $src_w) * $src_h); // Maintient le ratio de l'image
    			   	  $ext = strtolower(substr($lejpg, strrpos($lejpg, '.') + 1));
             if(($ext=="jpg")||($ext=="jpeg"))
    		 {   
                   $dst_im = imagecreatetruecolor($dst_w,$dst_h); // Crée une nouvelle image en couleurs vraies (librairie GD)
                   $src_im = imagecreatefromjpeg($lejpg); //Crée une nouvelle image à partir d'un fichier ou d'une URL
                   imagecopyresampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h); //rééchantillonne une image
        imagejpeg($dst_im,$im_dest); //imagejpeg — Envoie une image JPEG vers un navigateur ou un fichier
    	     }
    	elseif (($ext=="png")) {
    	 $dst_im = imagecreatetruecolor($dst_w,$dst_h); // Crée une nouvelle image en couleurs vraies (librairie GD)
    	 $src_im = imagecreatefrompng($lejpg);
    			   (imagealphablending($dst_im, false)) ;
    			    (imagesavealpha($dst_im, true));
    			   imagecolortransparent($dst_im,imagecolorallocate($dst_im,255,0,0));
    			   imagecopyresampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h); 
        imagepng($dst_im,$im_dest);
    	      }
                   imagedestroy($dst_im); //imagedestroy — Détruit une image
                   imagedestroy($src_im);
         }
    voila ...... on va dire Résolu !!

  8. #8
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Re:

    Cool que ton affaire soit réglé

    Penses à mettre 'résolu' ton message, c mieux pour la recherche, merci

    (surtout si tu veux que ton code soit réutilisé)

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

Discussions similaires

  1. Comparaison de fichiers text
    Par mick84m dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 22/07/2005, 16h48
  2. [Debutant(e)]comparaison de fichier : imprimer
    Par demostene dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 06/07/2004, 10h43
  3. Comparaison de fichiers Word
    Par Zelphalya dans le forum Langage
    Réponses: 5
    Dernier message: 20/10/2003, 15h15
  4. [langage] Comparaison de fichiers
    Par Jibees dans le forum Langage
    Réponses: 3
    Dernier message: 23/04/2003, 16h27
  5. Comparaison de fichier
    Par danzerg dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 11h49

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