Signatur
Beschreibung
uniqid() generiert eine eindeutige ID auf Basis der aktuellen Mikrosekunden-Zeit (via gettimeofday()). Ohne zusätzliche Entropie besteht die Ausgabe aus 13 Hexadezimalzeichen; mit $more_entropy = true wird ein zufälliger Float-Wert angehängt, was die Ausgabe auf 23 Zeichen verlängert und Kollisionen deutlich unwahrscheinlicher macht.
Ein optionaler $prefix erleichtert es, IDs aus verschiedenen Quellen (z. B. mehrere Server, mehrere Prozesse) auseinanderzuhalten. Die Gesamtlänge der erzeugten ID beträgt dann strlen($prefix) + 13 bzw. strlen($prefix) + 23 Zeichen.
Die Funktion eignet sich gut für temporäre Dateinamen, Cache-Schlüssel oder sonstige Situationen, in denen ein leichtgewichtiger Bezeichner ohne Datenbankzugriff benötigt wird. Für kryptografisch sichere Zufalls-IDs oder UUIDs sollte stattdessen random_bytes() zusammen mit bin2hex() oder die Funktion com_create_guid() (Windows) verwendet werden.
Achtung: uniqid() ist nicht kryptografisch sicher und daher ungeeignet für Passwort-Reset-Token, Session-IDs oder ähnliche sicherheitskritische Bezeichner. Auf stark ausgelasteten Systemen oder bei identischer Systemzeit können theoretisch Kollisionen auftreten – $more_entropy = true reduziert dieses Risiko, eliminiert es aber nicht vollständig.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $prefix | string | "" | Optionaler Präfix, der der erzeugten ID vorangestellt wird. Nützlich, um IDs verschiedener Server oder Komponenten zu unterscheiden. |
| $more_entropy | bool | false | Wenn true, wird ein kombinierter LCG-Zufallswert (Combined Linear Congruential Generator) an die ID angehängt. Dadurch wird die Eindeutigkeit erhöht und die Ausgabe verlängert sich auf 23 Zeichen (plus Präfix). |
Rückgabewert
$more_entropy = true), jeweils zuzüglich der Länge des Präfixes.Beispiele
Einfache Verwendung ohne und mit Präfix
<?php
// Einfache ID ohne Präfix
$id1 = uniqid();
echo $id1 . PHP_EOL; // z. B. 6643a2f1d3c7e
// ID mit Präfix
$id2 = uniqid('user_');
echo $id2 . PHP_EOL; // z. B. user_6643a2f1d3c7e
// ID mit Präfix und erhöhter Entropie
$id3 = uniqid('order_', true);
echo $id3 . PHP_EOL; // z. B. order_6643a2f1d3c7e4.52341267
Temporären Dateinamen erzeugen
<?php
// Temporäre Upload-Datei mit eindeutigem Namen anlegen
$uploadDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR;
$tempName = uniqid('upload_', true) . '.tmp';
$tempPath = $uploadDir . $tempName;
file_put_contents($tempPath, 'Temporäre Daten');
echo 'Temporäre Datei erstellt: ' . $tempPath . PHP_EOL;
// Aufräumen
unlink($tempPath);
Sichere Alternative mit random_bytes für sicherheitskritische IDs
<?php
// NICHT uniqid() für Tokens verwenden – stattdessen:
$secureToken = bin2hex(random_bytes(16));
echo $secureToken . PHP_EOL; // z. B. 3f4a2b1c9d8e7f6a5b4c3d2e1f0a9b8c
// Vergleich: uniqid() ist NICHT kryptografisch sicher
$unsafeId = uniqid('', true);
echo $unsafeId . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitswarnung: uniqid() ist nicht kryptografisch sicher. Die Ausgabe ist vorhersagbar, wenn die Systemzeit des Servers bekannt ist. Für Passwort-Reset-Token, CSRF-Token, API-Schlüssel oder Session-IDs muss stattdessen random_bytes() in Kombination mit bin2hex() genutzt werden.
Auf Systemen, auf denen gettimeofday() keine Mikrosekunden-Auflösung liefert (z. B. einige Windows-Konfigurationen), können Kollisionen häufiger auftreten. $more_entropy = true ist daher grundsätzlich empfehlenswert, wenn mehrere IDs in kurzer Folge erzeugt werden.
Die Funktion schlägt nie fehl und gibt immer einen String zurück – es gibt keinen Fehlerzustand und keine Ausnahme.