mt_srand()
Erfahren Sie, wie die mt_srand()-Funktion in PHP den Zufallszahlengenerator von mt_rand() initialisiert und welche modernen Alternativen existieren.
Heute besprechen wir die mt_srand()-Funktion in PHP. Diese Funktion initialisiert den Zufallszahlengenerator, der von mt_rand() verwendet wird. Hinweis: mt_srand() ist seit PHP 8.1 veraltet und wurde in PHP 8.4 entfernt. Für moderne PHP-Anwendungen sollten stattdessen random_int() oder random_bytes() verwendet werden.
Was ist die mt_srand()-Funktion?
Die mt_srand()-Funktion initialisiert den Mersenne-Twister-Zufallszahlengenerator mit einem bestimmten Seed-Wert. Wenn ein fester Seed angegeben wird, erzeugt mt_rand() eine vorhersehbare, reproduzierbare Zahlenfolge. Dieses deterministische Verhalten ist vor allem für Tests, Debugging oder Szenarien nützlich, in denen eine konsistente Zufallsausgabe erforderlich ist.
Verwendung der mt_srand()-Funktion
Die Verwendung von mt_srand() ist unkompliziert. Hier ist ein einfaches Beispiel:
Wie verwendet man die mt_srand()-Funktion in PHP?
In diesem Beispiel setzt mt_srand(12345) den Seed des Generators. Nachfolgende Aufrufe von mt_rand() erzeugen bei verschiedenen Programmläufen stets dieselbe Ausgabe, da der Seed konstant bleibt. Das Ergebnis wird in $result gespeichert und auf dem Bildschirm ausgegeben.
Hinweis zur Versionskompatibilität: In PHP 8.1+ löst dieser Code eine Deprecation-Warnung aus. Für PHP 8.4+ und moderne Projekte sollten mt_srand()/mt_rand() durch random_int() ersetzt werden, um sichere und unterstützte Zufallszahlengenerierung zu gewährleisten.
Der moderne Ersatz
mt_srand() dient dazu, Zufälligkeit durch Festlegen eines Seeds reproduzierbar zu machen. Die modernen, kryptografisch sicheren Funktionen können absichtlich nicht mit einem Seed versehen werden – sie liefern jedes Mal unvorhersehbare Werte:
<?php
// Modern, secure replacement — no seeding required
$result = random_int(1, 100); // a secure random integer between 1 and 100 (inclusive)
echo $result;
?>Da random_int() aus der kryptografisch sicheren Quelle des Betriebssystems schöpft, sollte sie für alles sicherheitskritische verwendet werden (Tokens, Passwörter, Einmalcodes). Der Nachteil ist der Verlust der Reproduzierbarkeit: Es gibt keinen Seed zu setzen, sodass derselbe Code niemals dieselbe Zahl zweimal erzeugt.
Wenn in PHP 8.2+ tatsächlich eine reproduzierbare Sequenz benötigt wird (zum Beispiel um bei jedem Testlauf dieselben Test-Fixtures zu erzeugen), sollte statt des veralteten mt_srand() der seedfähige, objektbasierte \Random\Randomizer mit der Mt19937-Engine verwendet werden.
Fazit
Obwohl mt_srand() deterministische Zufallsfolgen für Legacy-Code oder spezifische Testanforderungen bereitstellt, ist sie in PHP 8.1 veraltet und in PHP 8.4 entfernt worden. Die moderne PHP-Entwicklung sollte auf random_int() oder random_bytes() setzen, um sichere und unterstützte Zufallszahlengenerierung zu gewährleisten. Wir hoffen, dass dieser Leitfaden den historischen Kontext und die korrekte Verwendung von mt_srand() in älteren PHP-Umgebungen verdeutlicht.