uniqid în PHP

Generează un identificator bazat pe ora curentă, în microsecunde. Unic în practică, dar previzibil.

Sintaxă
uniqid(string $prefix = '', bool $more_entropy = false): string

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 uniqid pentru token-uri de resetare a parolei sau linkuri secrete. Valoarea poate fi ghicită din ora la care a fost creată. Folosește random_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.