Domanda

Sto provando a generare un ID univoco in php per archiviare il contenuto caricato dall'utente su un FS senza conflitti. Sto usando php, e al momento questo piccolo frammento è responsabile della generazione dell'UID:

$id = tempnam (".", "");
unlink($id);
$id = substr($id, 2);

Questo codice è orribile: crea un file temporaneo sull'FS e lo elimina, conservando solo la parte unica pertinente della stringa generata.

Esiste un modo migliore per farlo, preferibilmente senza dipendenze esterne?

Grazie mille!

È stato utile?

Soluzione

string uniqid ([ string $prefix [, bool $more_entropy ]] )

Ottiene un identificatore univoco con prefisso basato sull'ora corrente in microsecondi.

USAGE: $id = uniqid(rand(), true);

Altri suggerimenti

Poiché sia ??uniqid () che rand () sono funzioni basate sull'ora corrente, rand () non aggiunge quasi entropia, poiché il tempo cambierà solo una piccola quantità tra le rispettive chiamate.

Finché si utilizza l'opzione more_entropy , non si dovrebbe mai avere una collisione all'interno di un singolo server. Se si utilizza il clustering, assicurarsi di includere un prefisso che differisce tra i server.

uniqid () è quello che stai cercando nella maggior parte delle situazioni pratiche.

Puoi renderlo ancora più " uniq " aggiungendo un grande numero casuale dopo di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top