phpbar.de logo

Mailinglisten-Archive

AW: [php] uniqid

AW: [php] uniqid

Andreas Müller php_(at)_phpcenter.de
Thu, 28 Mar 2002 15:04:38 +0100


Hallo Andreas,

> Ab wann muß ich damit rechnen, daß IDs doppelt vergeben werden und wie
> kann ich das verhindern?
>
> $id  = md5(uniqid("lastdackel"))

Ab wann kann man schwer sagen. Ein MD5 Hash ist nunmal blos ein Hash und
vondaher nicht eineindeutig. MD5 streut zwar extrem gut im Wertebereich aber
trotzdem kann es vorkommen das man den selben Hash-Wert bekommt. Ist mit
bisher nur ein einziges mal passiert aber kann immer passieren. D.h. wenn du
100%ig sicher gehen willst dann prüfe die vergebenen ID's. Als ID in einer
DB die ich für länger brauche und immer wieder darüber referenzieren will
würde ich mich nicht darauf verlassen das es so schnell keine doppelten
Elemente gibt.
Was glaube ich nachgewiesen ist das MD5(int32) eineindeutig ist, d.h. darauf
kannst du dich recht gut verlassen.

Aber da gibt es noch ein oft vernachlässigtes Problem: Server mit mehreren
Prozessoren verarbeiten tatsächlich mehrere Prozesse parallel. So kann es
vorkommen, dass auf zwei Prozessen die selbe ID erzeugt wird. Also auch
darauf lohnt sich ein Blick.

Gruß,
Andreas

PS: Man kann es mit Sicherheit und Zuverlässigkeit übertreiben. Aber im
professionellem Umfeld würde ich mir überlegen ob ich lieber 2 Zeile Code
mehr schreibe. Kurzsichtige Programmierer gab es und gibt es genug. Siehe
Y2K :-)


php::bar PHP Wiki   -   Listenarchive