Ce face uniqid
uniqid transformă momentul curent (secunde și microsecunde) într-un text hexazecimal de 13 caractere. Poți adăuga un prefix, iar cu $more_entropy se adaugă un număr la final, pentru a reduce riscul de dubluri pe servere foarte încărcate.
Pentru că se bazează pe ceas, valoarea poate fi ghicită. Este potrivită pentru nume de fișiere temporare sau identificatori interni, nu pentru token-uri de resetare a parolei, chei API sau coduri de confirmare. Pentru acestea folosește bin2hex(random_bytes(16)).
Parametri
| Parametru | Descriere |
|---|---|
$prefix |
Opțional. Text pus la început. |
$more_entropy |
Opțional. true adaugă un punct și cifre suplimentare (23 de caractere în total, fără prefix). |
Ce returnează
Identificatorul, ca text.
Exemple
Exemplul 1: Identificatori simpli și cu prefix
<?php
echo uniqid() . "\n";
echo uniqid("cmd_") . "\n";
echo uniqid("", true);
Rezultat posibil (diferă la fiecare rulare)
6ad5f7a652e42
cmd_6ad5f7a652e48
6ad5f7a652e4e8.42984777
Exemplul 2: Nume unic pentru un fișier încărcat
<?php
$original = "poza vacanta.jpg";
$extensie = pathinfo($original, PATHINFO_EXTENSION);
echo uniqid("img_") . "." . $extensie;
Rezultat posibil (diferă la fiecare rulare)
img_6ad5f7a65e3b1.jpg
Exemplul 3: Pentru securitate: random_bytes
<?php
$token = bin2hex(random_bytes(16));
echo $token . "\n";
echo strlen($token) . " caractere";
Rezultat posibil (diferă la fiecare rulare)
f3a91c07d2b84e5a9c61e0d47b28a3f5
32 caractere
Greșeli frecvente
- Folosești
uniqidpentru token-uri de resetare a parolei sau linkuri secrete. Valoarea poate fi ghicită din ora la care a fost creată. Foloseșterandom_bytes. - Te bazezi pe
uniqid()fără$more_entropyîntr-o buclă rapidă. Pe unele sisteme, două apeluri în aceeași microsecundă pot da aceeași valoare.
Comenzi înrudite
random_int: Generează un număr întreg aleatoriu, sigur, între două valori.microtime / hrtime: Returnează momentul curent cu precizie de microsecunde. Este folosită pentru măsurarea duratei unui cod.md5: Calculează amprenta MD5 a unui text: 32 de caractere hexazecimale. Bună pentru sume de control, nu pentru parole.