Ab und an werden – beispielsweise, wenn es um das Generieren einer eindeutigen Session-ID geht – zufällige Werte benötigt. Unter PHP übernimmt diese Aufgabe die Funktion rand. Sie liefert eine Zufallszahl – genauer gesagt eine Pseudo-Zufallszahl, da es keine echten softwaregenerierten Zufallszahlen gibt – die vom Programmierer in Folge in seinem Code verwendet werden kann. Hinter rand steht ein sogenannter Zufallszahlengenerator, der nichts anderes macht, als die Zahlen einer berechenbaren Folge zu errechnen und entsprechend zurückzuliefern. Der Generator hat einen Zustand aufgrund dessen er den nächsten Wert der Folge berechnet, wobei nach jedem gelieferten Wert der Zustand angepasst wird.
Beachten Sie bitte, dass bei der Erzeugung von Session-IDs nicht allein auf einen Zufallswert gesetzt werden sollte. Bei einer gut besuchten Website reicht dies nicht aus und Sie sollten die Zufallszahl lediglich als Komponente zur Erzeugung der Session-ID nutzen. Nutzen Sie in einem solchen Anwendungsfall eher md5-Hashes, die durch die Funktion md5 geliefert und mit einem zufällig erzeugten String gefüttert wird. Das String kann unter Verwendung der Funktion uniqid erzeugt werden.
Wie bereits erwähnt, werden nicht wirklich Zufallswerte berechnet (der Zufall läßt sich naturgemäß nicht berechnen), sondern die jeweils gemäß dem Zustand des Generators folgende Pseudo-Zufallszahl. Bevor der Zufallszahlengenerator genutzt werden kann, muss er zunächst mit einem Startwert – dem sogenannten Seed – initialisiert werden, was mit einem Aufruf der Funktion srand geschieht. Zwar wird dies seit PHP 4.2.0 beim ersten Aufruf von rand automatisch erledigt, aber zur Sicherheit sollte der Aufruf dennoch erfolgen, da man sich nicht sicher sein kann, dass auf jedem System, auf dem ein Script eingesetzt wird auch eine neuere PHP Version läuft. Als Seed wird meist die Systemzeit des Webservers (in Millisekunden; geliefert durch einen Aufruf der Funktion time) verwendet, wobei davon ausgegangen wird, dass diese bei jedem Request an den Server unterschiedlich ist.
Dies ist übrigens wichtig, da ein Zufallszahlengenerator bei gleichem Wert zur Initialisierung auch stets die gleiche Zahlenfolge liefert, was im folgenden Beispiel demonstriert wird. Beachten Sie, dass die Nutzung der Funktionen mt_srand und mt_rand Zufallswerte von erheblich besserer Qualität liefern. Auf der Folgeseite werden auch Beispiele zur Nutzung dieser Funktionen beschrieben.
<?php // Aktuelle Systemzeit holen $t = time (); // Initialisierung des Zufallszahlengenerators srand ($t); // Zehn Zufallswerte ausgeben echo "Zufallswerte 1:<br>"; for ($i = 0; $i < 10; $i++) echo rand () . ' '; echo '<br>'; // Mal sehen, welche Werte der Zufall diesmal liefert srand ($t); echo "Zufallswerte 2:<br>"; for ($i = 0; $i < 10; $i++) echo rand () . ' '; echo '<br>'; ?>
Zufallswerte 1:
324136340 1422639377 1196215534 326752739 1311286077 1632654059 1257252014 1393993497 994876053 1995470329
Zufallswerte 2:
324136340 1422639377 1196215534 326752739 1311286077 1632654059 1257252014 1393993497 994876053 1995470329
Das Beispiel zeigt, dass man sich nie auf den Zufall verlassen sollte, wenn der Webserver besonders flink ist und die Internetseite darüber hinaus gut besucht wird. Wird das Script nämlich zur selben Zeit von zwei Besuchern gleichzeitig ausgeführt, dann erhalten auch beide die gleiche Zufallszahl. Je nach Anwendung kann dies zu komplikationen führen, die den Betrieb stören. Folgendes Beispiel zeigt eine einfache Banner-Rotation, die mittels Zufallszahlen gesteuert wird – ein eher unkritischer Anwendungsfall. Hier wird ein Array verwendet, in dem die URLs zu alternativ anzuzeigenden Bannergrafiken abgelegt sind. Die Ausgabe des HTML-Codes zur Anzeige des entsprechenden Banners erfolgt auch hier wieder mit echo.
<?php // Zufallszahlengenerator initialisieren srand (time ()); // Liste der zur Wahl stehenden Banner bzw. deren URLs $banners = array ("/banner/b1.gif", "/banner/b2.gif", "/banner/b3.gif", "/banner/b4.gif"); // Mittels Modulo-Operator (%) wird der beim ganzzahligen Teilen verbleibende Rest ermittelt. // Hierdurch wird der Bereich der möglichen Werte auf 0-3 begrenzt, damit keine ungültigen // Indexe beim Zugriff auf das Array mit den Banner-URLs entstehen. $banner = rand () % (sizeof ($banners) - 1); // Banner an zufällig gewähltem Index im HTML-Code der Ergebnisseite einbauen echo '<img src="' . $banners[$banner] . '" title="Banner"/>'; ?>
<img src="/banner/b3.gif" title="Banner"/>
Hallo erstmal wer kennt von euch einen WEbprogrammieren,desginer der mir eine Seite erstellen kann ,Communityportal sowas in der art wie ... » mehr
von NCWebmaster am Mittwoch, 7. Oktober 2009 00:32 in PHP - bisher 1 AntwortHallo auch,
da gibt es sicher viele die das machen würden, allerdings deutlich weniger die es auch tatsächlich machen könnten - noch einmal weniger ... » mehr
Hallo erstmals..... also ich kenn mich ja nicht so aus, aber ich denke die Menschheit fliegt auf den Mond, dann müsste es auch eine Lösung für mein ... » mehr
von Dummbazz am Dienstag, 24. Februar 2009 15:11 in PHP - bisher 2 AntwortenDanke für die aufmunternde Worte... ... » mehr
tach auch, ich habe nach einem besucherzähler gesucht, der auf meiner seite anzeigt, wieviele besucher sich dort aufhalten. allerdings habe ich ... » mehr
von marcel am Montag, 8. Dezember 2008 12:21 in PHP - bisher 1 AntwortHallo,
sicher kann die Counter-Klasse so umgeschrieben werden, dass sie auch ohne Datenbankanbindung
funktioniert. Allerdings würde das einer neuen ... » mehr
Hallo an Alle! Hoffe, dass ich hier im richtigen Forum bin. Vielleicht kann mir jemand einen Tip geben. Ich möchte auf meiner Webpage ein Formular ... » mehr
von muenchner am Samstag, 12. Juli 2008 18:31 in PHP - bisher 1 AntwortHallo,
ich bin mir nicht sicher, wie das jetzt gemeint ist! Geht es um die Frage: Sollen die Optionen des Forumlars (die einzelnen Checkboxen) in ... » mehr
Hi, zunächsteinmal danke für das Tutorial: ... » mehr
von migges am Montag, 2. Juni 2008 12:05 in PHP - bisher 3 AntwortenDas mit den Oder-Operatoren wundert mich ein wenig... Welchen Fehler hat der Interpreter an diesen Stellen ausgegeben?
Ich habe bislang mit ... » mehr
¬ Menu
¬ Gratis Download
¬ Tutorials
¬ Seminare
¬ Yoga
¬ Insolvenzrecht
¬ News
15.08.2008Schleifen in PHP: Die While-Schleife » mehr 13.08.2008Nutzung von Variablen unter PHP: Definition, Sichtbarkeit und vordefinierte Variablen » mehr 11.08.2008Ausgabe von Datum und Zeit mit PHP nach Konvertierung in ein String » mehr Eine vollständige News-Liste ist auf der News-Seite zugänglich.
¬ Foren
¬ Buchtipp

Enterprise PHP 5
Weitere PHP Bücher finden Sie unter PHP Literatur