Meldung

05.08.2008 - Erzeugung von Pseudo-Zufallszahlen mit PHP

Die Funktion rand dient unter PHP der Erzeugung von Zufallswerten. Mit ihr kann der Webprogrammierer Pseudo-Zufallszahlen generieren, die bei der zufallsgesteuerten Erzeugung von Inhalten (Content) benötigt werden. Bevor allerdings Zufallswerte erzeugt werden, sollte der Zufallszahlengenerator erst einmal initialisiert werden. Dies geschieht unter Verwendung der Funktion srand, die einen Startwert (seed) als Parameter akzeptiert. Fehlt ein solcher Startwert, so wird ab PHP 4.2.0 ein zufälliger Wert zur Initialisierung gewählt. Zwar wird die Initialisierung des Zufallszahlengenerator seit PHP Version 4.2.0 beim ersten Aufruf von rand automatisch eingeleitet, allerdings sollte die manuelle Initialisierung – für den Fall, dass das Script auf einer älteren Version ausgeführt wird – dennoch durchgeführt werden.

Alternativ zur Kombinantion rand/srand stehen die Funktionen mt_rand und mt_srand zur Verfügung. Im Unterschied zu rand liefert mt_rand Zufallswerte mit einer größeren Periodenlänge, die darüber hinaus in höchsten Maße gleichverteilt ist (geringe Korrelation aufeinanderfolgender Werte). Darüber hinaus ist das durch mt_rand implementierte Verfahren (Mersenne-Twister) der wohl derzeit schnellste Algorithmus zur Erzeugung von Pseudo-Zufallszahlen. Dagegen nutzt rand die vom System vorgegebene – meist nicht besonders schnelle und Qualitativ hochwertige – Funktion zur Erzeugung von Zufallswerten. Unter Linux wird die in der libc enthaltene Funktion genutzt. Ein weiter Grund: Auf einigen Systemen werden nur Werte zwischen 0 und 32768 zurückgeliefert, wenn die Funktion rand ohne Parameter aufgerufen wird. Beispiele zur Nutzung von der verbesserten Form des Zufallswert-Generators finden Sie unter mt_rand und mt_srand.

Die Erzeugung von zufälligen Inhalten (Content) wird bei modernen Internetseiten recht häufig verwendet. Je nach ermittelter Zufallszahl wird der dafür vorgesehene HTML-Code in die Ergebnisseite eingebettet. Ein Anwendungsfall ist beispielsweise die Bannerrotation. Dabei sollen Bannergraphiken aus einem Pool von zur Darstellung vorgesehenen Bannern, mit in etwa gleichverteilter Häufigkeit dargestellt werden. Aber auch wenn – etwa auf der Startseite einer Website – ein zufällig ausgewählter Artikel angezeigt werden soll (beispielsweise ein Teaser zu einem von einem Unternehmen angebotenen Artikel) kommen Zufallszahlen zum Zuge.


Alexander Müller