W3docs

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?

php— editable, runs on the server

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.

Practice

Übung
Was ist der Zweck der mt_srand()-Funktion in PHP?
Was ist der Zweck der mt_srand()-Funktion in PHP?
Was this page helpful?