Hallo Robert,
Das ist ja nett, dass Du nochmal versucht hast, alles zusammenzufassen. Warum Du aber scheinbar mein Posting von 20:07 übersehen hast, in dem ich bereits darauf hinwies, dass man mit uniqid() -> Handbuch keine echten Zufallszahlen erzeugen kann, weiß ich noch nicht.
da das eigentlich keine Zusammenfassung sein sollte, sondern eine kleine Ergänzung, habe ich auch nichts vergessen. Dass z.B. auch Sven zwischenzeitlich in den Quellcode geguckt hat, wusste ich noch nicht, als ich den Beitrag geschrieben habe.
Hätte ich eine Zusammenfassung schreiben wollen, hätte ich uniqid()
hat absolut gar nichts mit Zufallzahlen zu tun geschrieben.
Viel wichtiger ist aber, dass Ihr hier alle immer noch meinen Hinweis auf die **Nicht-**Einmaligkeit der Zeichenfolgen im Posting von 20:38 missachtet.
Das hat nichts mit Missachtung zu tun. uniqid()
macht genau das, was es soll. Nämlich mehr oder weniger Mikrosekunden aus dem Dezimal- ins Hexidezimalsystem zu überführen. Und in seinem Rahmen (zwei aufeinander folgende Aufrufe > 1 Mikrosekunde, keine konkurrierenden/parallelen Prozesse, absolut proportionale Systemzeit, also z.B. kein Umstellen der Systemzeit) ist dies absolut eindeutig. Dazu muss man aber nun mal wissen, was da im Hintergrund passiert.
Kleines Testskript zum Ausprobieren:
Das ist alles richtig. Es ändert aber nichts daran, dass Du mit uniqid
keinen echten Zufall erzeugen kannst. Du verwendest ja beispielsweise mt_rand()
, das erweist seinen Dienst auch ganz ohne uniqid()
.
Und wenn es Dir nur um die Eindeutigkeit geht, kannst Du auch einfach ein usleep()
oder so davor setzen. Oder noch besser eine while()
-Schleife drum herum basteln, die prüft, ob die Zahl schon existiert und das Statement sonst gegebenenfalls nochmals ausführt.
Gruß, Dennis