Page 1 sur 1

Générer un nom de fichier aléatoire

Posté : 29 oct. 2012, 22:30
par YADev
Salut,

Pour un upload d'avatars, je dois générer un nom aléatoire pour éviter de supprimer un fichier déjà géré.

Mais je n'y arrive pas... Ce que j'ai déjà fait :
							
							$name_file = $_FILES['fichier']['name'];
							$name_ext = $_FILES['fichier']['type'];
							
						    $name_base = pathinfo($name_file, PATHINFO_BASENAME);
							$name_extension = pathinfo($name_ext, PATHINFO_EXTENSION);
							
							$name_temp = hash(sha512, session_id().microtime($name_base));
							$name_final = $name_temp + $name_ext;
Où est mon erreur ? :(
Car ça me renvoi ceci : Notice: Use of undefined constant sha512 - assumed 'sha512' in C:\wamp\www\dev\include\compte.function.php on line 123

Merci d'avance!

Re: Générer un nom de fichier aléatoire

Posté : 29 oct. 2012, 22:44
par moogli
$name_temp = hash(sha512, session_id().microtime($name_base));

Le premier argument de la fonction hash doit être une chaine de caractère, la tu passe une constante (qui n'existe pas).


donc $name_temp = hash('sha512', session_id().microtime($name_base));

Il existe déja une fonction php pour ce que tu veux faire tempnam


@+

Re: Générer un nom de fichier aléatoire

Posté : 29 oct. 2012, 23:05
par YADev
Salut et merci,

Pour la fonction, je ne sais pas si je peux l'utiliser j'ai déjà tout un script d'upload : http://phpcodeur.net/articles/php/upload
Un peu modifié selon mes besoins.

Je m'emmêle un peu avec toutes ces manipulations et j'en suis arrivé à simplifier de la manière suivante :
				
$name_base = pathinfo($_FILES['fichier']['name'], PATHINFO_BASENAME);	// On récupère juste le nom sans l’extension.
$name_temp = hash('sha512', session_id().microtime($name_base)); // On hash ce même nom pour le rendre unique.
$name_final = $name_temp + $type_file; // On ajoute le nouveau nom du fichier à son extension d'origine, $type_file = $_FILES['fichier']['type'];
Je n'ai plus d'erreurs affichées, en revanche, le fichier créé se nomme par exemple « 38 », « 56 » sans aucune extension :cry:

Re: Générer un nom de fichier aléatoire

Posté : 29 oct. 2012, 23:25
par moogli
heu la concaténation en php c'est le point pas le plus :)



@+

Re: Générer un nom de fichier aléatoire

Posté : 30 oct. 2012, 00:07
par AB
Oui ou sinon tu peux concaténer le nom original (avant l'extension) avec uniqid, ça permet de mieux garder le nom original (mais ça fait un nom assez long).

Ou encore tu pourrais faire un renommage incrémentiel (qui préserve au mieux le nom original) mais pour cela c'est plus compliqué et il faut faire un fonction "maison". Si cela t'intéresse tu peux regarder ce tuto qui en plus gère les erreurs de dépassement du post_max_size (le nom de la fonction de renommage dans le code est Rename_fich).

A noter que si tu veux faire en plus un éventuel redimensionnement pour avoir une largeur et/ou une hauteur maximale de la vignette, tu peux t'intéresser à cette classe d'upload qui propose par ailleurs au choix un renommage incrémentiel ou avec un suffixe unique.