W3docs

mt_srand()

Découvrez la fonction mt_srand() en PHP, utilisée pour initialiser le générateur de nombres aléatoires de mt_rand().

Aujourd'hui, nous allons aborder la fonction mt_srand() en PHP. Cette fonction initialise le générateur de nombres aléatoires utilisé par mt_rand(). Remarque : mt_srand() est dépréciée depuis PHP 8.1 et supprimée dans PHP 8.4. Pour les applications PHP modernes, utilisez random_int() ou random_bytes() à la place.

Qu'est-ce que la fonction mt_srand() ?

La fonction mt_srand() initialise le générateur de nombres aléatoires Mersenne Twister avec une valeur de graine spécifique. Lorsqu'une graine fixe est fournie, mt_rand() produit une séquence de nombres prévisible et reproductible. Ce comportement déterministe est principalement utile pour les tests, le débogage ou les scénarios où une sortie aléatoire cohérente est requise.

Comment utiliser la fonction mt_srand() ?

L'utilisation de mt_srand() est simple. Voici un exemple de base :

Comment utiliser la fonction mt_srand() en PHP ?

php— editable, runs on the server

Dans cet exemple, mt_srand(12345) définit la graine du générateur. Les appels suivants à mt_rand() produiront la même sortie à chaque exécution, car la graine reste constante. Le résultat est stocké dans $result et affiché à l'écran.

Note de compatibilité de version : Dans PHP 8.1+, ce code déclenchera un avertissement de dépréciation. Pour PHP 8.4+ et les projets modernes, remplacez mt_srand()/mt_rand() par random_int() pour une génération de nombres aléatoires sécurisée et prise en charge.

Le remplacement moderne

mt_srand() existe pour rendre l'aléatoire reproductible en fixant une graine. Les fonctions modernes, cryptographiquement sécurisées, ne peuvent intentionnellement pas être initialisées — vous obtenez des valeurs imprévisibles à chaque fois :

<?php
// Modern, secure replacement — no seeding required
$result = random_int(1, 100); // a secure random integer between 1 and 100 (inclusive)

echo $result;
?>

Comme random_int() s'appuie sur la source cryptographiquement sécurisée du système d'exploitation, vous devriez l'utiliser pour tout ce qui est sensible à la sécurité (jetons, mots de passe, codes à usage unique). L'inconvénient est la perte de reproductibilité : il n'y a pas de graine à définir, donc le même code ne produit jamais le même nombre deux fois.

Si vous avez réellement besoin d'une séquence reproductible (par exemple, pour générer les mêmes fixtures de test à chaque exécution) dans PHP 8.2+, utilisez le \Random\Randomizer orienté objet et initialisable avec le moteur Mt19937, plutôt que la fonction dépréciée mt_srand().

Conclusion

Bien que mt_srand() fournisse des séquences aléatoires déterministes pour le code hérité ou des besoins de tests spécifiques, elle est dépréciée dans PHP 8.1 et supprimée dans PHP 8.4. Le développement PHP moderne devrait reposer sur random_int() ou random_bytes() pour une génération de nombres aléatoires sécurisée et prise en charge. Nous espérons que ce guide clarifie le contexte historique et l'utilisation correcte de mt_srand() dans les environnements PHP plus anciens.

Pratique

Pratique
Quel est le rôle de la fonction mt_srand() en PHP ?
Quel est le rôle de la fonction mt_srand() en PHP ?
Was this page helpful?