La fonction uniqid() ne marche pas sous PHP5 ?

Pour ceux qui cherchent à générer des noms uniques (références de produits, noms d’images uploadées sur un serveur, clés primaires non auto-incrémentées, mots de passes, etc…), la fonction uniqid() est parfaite.
…Sauf que chez moi, elle ne marche pas sous PHP 5 … La solution est simple :
« uniqid retourne un identifiant préfixé unique, basé sur l’heure courante, en micro-secondes. Le paramètre prefix est optionnel mais peut servir à identifier facilement différents hôtes, si vous générez simultanément des fichiers depuis plusieurs hôtes, à la même micro-seconde » (source)
En pratique, si on appelle uniqid() ainsi :
$var = uniqid();
on obtient une variable alphanumérique avec 13 caractères, ce qui est amplement suffisant pour la plupart des cas.
Le problème vient sous PHP5 : à l’usage, ma variable $var ne me renvoyait rien du tout, alors qu’il n’y avait aucun soucis avec PHP4…
Après quelques recherche, il s’avère que uniqid() supporte un paramètre « more entropy« , en théorie facultatif, mais qui en fait l’est pas tant que ça.
Ce paramètre permet d’allonger la chaîne à 23 caractères pour plus de sécurité. Personnellement je trouve ça trop long mais il en faut pour tous les gouts !
Ce paramètre se passe ainsi :
$var = uniqid('xx', true);
ou ‘xx’ est un préfixe facultatif, et true signifie l’appel des 23 caractère.
Donc la solution pour PHP 5 et de passer tout de même le paramètre « more entropy » mais avec une valeur … false
Ce qui donne : $var = uniqid('', false);
Et… ça marche !
Exemple : pour générer un nom unique pour un fichier obtenu par upload libre sur un serveur :
// on extrait l'extension du fichier :
$tablo = pathinfo($_FILES[$nomfic]['name']) ;
$ext = strtolower($tablo['extension']) ;
// et on renomme le fichier avec un nom unique :
$nomfic2 = uniqid('', false).'.'.$ext;
(NB : pour l’extension, voir ici)
Pour les paranos, la valeur la plus sécurisée est la suivante :
$var = md5(uniqid(rand(), true));
lool
Bonjour…
Et un IMMENSE merci !!! Je galère depuis une semaine avec un multi upload…et je trouve (par hasard, mais je mets ton adresse dans mes préférées immédiatement!)ton tuyau…et là: Bingo, ça marche nickel!
Merci mille fois! :wub:
http://www.uniqid-php.com
J’ai trouve ce site qui propose l’uniqid courant pour ceux qui veut en recuperer un sans avoir a lancer une page en local juste pour ca, bien pratique !
ben chez moi c’est sous PHP4 qu’elle ne marchait pas, ton truc m’a dépanné : merci thx