8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je me demandais si c'était possible de vérifier avant l'upload d'images sur un serveur si parmi les images que l'internaute upload, cetaines ne sont pas en double.

ex :

avec un formulaire d'upload d'images comprenant 3 champs pour l'upload :

champ 1 : image1.jpg
champ 2 : image2.jpg
champ 3 : image1.jpg

ici le champ 1 et 3 sont identiques (même nom d'image) dans ce cas un message d'erreur invitant l'internaute à vérifier ses images s'affiche

Par contre si ce test peut s'effectuer sur autre chose que le nom de l'image ce serait mieux (avec filesize ?).

Merci pour vos lumières
Modifié par pareto (13 Jul 2012 - 18:27)
Si c'est uniquement le nom du fichier, il vaut mieux éviter (2 images totalement différentes peuvent avoir 2 noms identiques). Il vaut mieux s'occuper de générer un nom unique pour les images.

Pour vérifier si une image identique existe déjà par contre c'est simple il suffit de faire un hash md5 ou sha1 du contenu du fichier, tu peux le stocker dans ta base de données avec tes autres infos sur les images. Ensuite à l'upload tu vérifies si le hash est déjà présent.

Attention à bien le faire sur le fichier brut non modifié et garde à l'esprit qu'une image même légèrement modifiée générera un hash différent. Le filesize, oubli, 2 images différentes peuvent tout à fait avoir un filesize identique.
ok ça marche (reste à adapter aux besoins spécifiques)

<html>
<head>
<title>test upload 2 images</title>
</head>
<body>


<?php

if (!empty($_POST)) {

  $md5filename0 = (md5_file($_FILES['image0']['tmp_name']));
  $md5filename1 = (md5_file($_FILES['image1']['tmp_name']));
  
   
   if ($md5filename0 == $md5filename1)
   {
   echo $_FILES['image0']['name'].' et '.$_FILES['image1']['name'].' identiques'; 
   }
                              }
?>

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data" name="formupload" id="formupload" method="post">
<input name="image0" type="file" />
<input name="image1" type="file" />
<input type="submit" name="bouton" value="go" />
</body>
</html>

Modifié par pareto (13 Jul 2012 - 18:28)
md5_file() calcule le MD5 du fichier filename en utilisant l'algorithme » RSA Data Security, Inc. MD5 Message-Digest Algorithm, puis retourne la valeur ainsi calculée. Le résultat est un nombre de 32 caractères hexadécimaux.

avec ce code même si je change le nom du fichier mais que malgré tout les 2 images sont identiques, le md5 est identique, j'ai testé avec 2 images identiques renommées.

Faites le test
Modifié par pareto (16 Jul 2012 - 12:01)