Aller au contenu

renommer un upload


milou39

Sujets conseillés

bonjour,

J'utilise pour mon site un script d'upload de photo, mais le probleme est avec le nom de ces photos!

Si le nom de la photo uploader existe deja, il remplace l'ancienne photo!

Du coup je peut peut me retrouvez avec plusieur utilisateur qui ont la meme photo si ils l'ont tous apellés "ma_photo.jpg"!

Et pire si quelqu'un decide de suprimer sa photo...

Voila je voulais savoir quelle technique vous avez adopter pour parer ce genre de probleme ou s'il y a une astuce?

le script que j'utilise est celui-ci:

 if(!empty($_FILES['image']["name"])){

$repertoireDestination = "ImgArtiste/";
$poidsFichier = $_FILES['image']["size"];
$nomDestination = $_FILES["image"]["name"];
$extension = strrchr( $nomDestination, ".");


if(isExtAuthorized($extension)){
if($poidsFichier < $MAX_FILE_SIZE){
if (is_uploaded_file($_FILES["image"]["tmp_name"])) {
if (move_uploaded_file($_FILES['image']['tmp_name'],
$repertoireDestination.$nomDestination)) {
echo "Le fichier temporaire ".$_FILES["image"]["tmp_name"].
" a été déplacé vers ".$repertoireDestination.$nomDestination;
} else {
echo "Le déplacement du fichier temporaire a échoué".
" vérifiez l'existence du répertoire ".$repertoireDestination;
}
} else {
echo "L'enregistrement a échoué<br>votre photo est trop grosse!";
}
}else {
echo "L'enregistrement a échoué<br>votre photo est trop grosse!";
}
}

}

Merci a vous!!

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Au lieu de laisser le choix du nom de l'image à l'utilisateur, tu devrais l'imposer.

Par exemple, en fonction de l'utilisateur, tu pourrais faire un truc du genre :

$nomDestination = $utilisateur.$var;

avec $utilisateur qui représente l'utilisateur et $var une variable incrémentée automatiquement à partir d'une base de données par exemple).

comme ça tous les noms de photos seront uniques.

++

Patrick

Lien vers le commentaire
Partager sur d’autres sites

merci de votre reponse!

J 'avais deja penser a une incrementation mais ça ne me paraissait pas top!

Par contre je vien d'avoir une idée!

comment je pourrait faire pour apliquer a $nomdedestination="annee-jour-heure -minute-sec-millisecondes.jpg"

es ce qu'on peut avoir ça avec une funtion date? oui je metrise pas trop php mais je vais regarder vite fait!

merci

Lien vers le commentaire
Partager sur d’autres sites

Je te mets un code copier-coller de mes codes, donc regarde un peu, il doit y avoir quelques variables à modifier...

// On liste tous les fichiers qu'il y a dans le dossier.
$fichiers = $this->ListeDossier($dossier);

// On fait une boucle tant que le fichier existe
$i = 0;
$nv_name = $nom_pur.'.'.$ext;

while (in_array($nv_name, $fichiers))
{
$nv_name = $nom_pur.'('.$i++.')'.'.'.$ext;
}

$fname = $nv_name;

// La fonction listeDossier
function ListeDossier($dir)
{
$dh = opendir(ROOT.$dir);
while (false !== ($filename = readdir($dh)))
{
$files[] = $filename;
}

$fichiers = array();
$i = 0;
foreach($files as $file)
{
if ($file != '.' && $file != '..' && !is_dir($file))
$fichiers[$i++] = $file;
}
return $fichiers;
}

Ca te permet de garder le même nom de fichier, ou bien de l'adapter par des (0),(1) au cas où...

Lien vers le commentaire
Partager sur d’autres sites

Je suis parfaitement d'accord avec Sébastien (iNCiTEWeb).

Le contrôle des informations envoyées par formulaire doit-être systématique, question de sécurité en plus d'éviter des formats de données non compatibles entre ce qui est saisi et ta base de données.

++

Patrick

Lien vers le commentaire
Partager sur d’autres sites

date("Y-m-d-H-i-s-") > Autant mettre un 'timestamp' > time().

Et pourquoi pas y ajouter les microsecondes :> microtime()

Suffixé à l'identifiant de l'utilisateur, et le tour est joué.

Pour le nom du fichier ? Ben simple : une base de données, et d'un coté le nom de l'utilisateur, et de l'autre le nom du fichier.

Y'a des droits ? Simple :> comparer les id user <> id_user_photo

Ou une colonne pour dire 'tout le monde', ou 'juste l'user'.

J'ai toujours renommé les docs : Une cvthèque, c'est bien connu : tout le monde envoie son cv comme ca : cv.doc :D

Lien vers le commentaire
Partager sur d’autres sites

bonjour,

J'ai donc realisé la petite modification du code qui marche tres bien maintenant!

Je post donc le resultat pour les prochains qui liront ce post!

Pour le modifier le nom de destination par la date j'ai donc remplacer:

$nomDestination = $_FILES["image"]["name"];

par:

$nomDestination = date("Y-m-d-H-i-s-").rand(1000,9999).".jpg";

Ce qui marchait tres bien, mais qui imposait uploader que des images ".jpg"

donc voici la correction finale qui modifie le nom et garde l'extension originale:

// Définition des extensions de fichier autorisées (avec le ".")

$AUTH_EXT = array( ".jpg",".JPG", ".jpeg",".JPEG",".gif",".GIF",".bmp",".BMP",".png",".PNG",".mp3",".MP3",".wav",".WAV") ;

// Fonction permettant de vérifier si l'extension du fichier est

// autorisée.

function isExtAuthorized( $ext){

global $AUTH_EXT;

if(in_array($ext, $AUTH_EXT)){

return true;

}else{

echo"extension non valide";

return false;

}

if(!empty($_FILES['image']["name"])){

$repertoireDestination = "ImgArtiste/";

$extension = strrchr( $_FILES['image']["name"], ".") ;

$nomDestination = date("Y-m-d-H-i-s-").rand(1000,9999).$extension;

if(isExtAuthorized($extension)){

...( enregistrement)...

Encore merci a vous pour toutes vos reponse...

Je retourne au travail...

@+

milou

Modifié par milou39
Lien vers le commentaire
Partager sur d’autres sites

Si je peux me permettre, profites en pour séparer les fichiers en plusieurs dossiers... car à moins d'utiliser un système de fichier vraiment adapté (reiserFS ?) avoir plusieurs dizaines / centaines de milliers de fichiers dans le même dossier, ça n'aide jamais.

C'est évidement à étudier en fonction du volume total ainsi que de la fréquence de mise à jour, mais ça pourrait par exemple donner ça :

$nomDestination = date("Y-m/d/H-i-s-").rand(1000,9999).".jpg";

Bon évidement, il faut aussi assurer la création des dossiers le moment venu.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...