picture picture
décembre 22, 2009 PHP 3 Commentaires

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 :D !

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

3 Responses to “La fonction uniqid() ne marche pas sous PHP5 ?”

3 Commentaires

  1. Eric_V dit :

    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:

  2. Herve dit :

    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 !

  3. strange dit :

    ben chez moi c’est sous PHP4 qu’elle ne marchait pas, ton truc m’a dépanné : merci thx

Commentaire

Name

Mail (ne sera pas publié)

Website

Laisser ces deux champs tels quels :
:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: