note 8986 modified in function.srand by felipe

From: Date: Mon, 21 Jul 2008 01:54:35 +0000
Subject: note 8986 modified in function.srand by felipe
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-142398@lists.php.net to get a copy of this message
It is REALLY essential to make sure that srand is called only once. This is a bit difficult if the call is hidden somewhere in third-party code you include. For example, I used a standard banner script that *seemed* to work well putting three random banners in one frame. But in the long run, the choice appeared somewhat biased - probably because srand was called once per banner, not once per run. It would be nice if the random number generator worked like in PERL: If You use the random function without having called srand ever before in a script, srand is invoked before (and automatically with a nice seed, hopefully). I suggest that one should do something like this: <?php if (!$GLOBALS["IHaveCalledSrandBefore"]++) { srand((double) microtime() * 1000000); } ?> (Depending on the situation, one might also work with a static variable instead) --was-- It is REALLY essential to make sure that srand is called only once. This is a bit difficult if the call is hidden somewhere in third-party code you include. For example, I used a standard banner script that *seemed* to work well putting three random banners in one frame. But in the long run, the choice appeared somewhat biased - probably because srand was called once per banner, not once per run. It would be nice if the random number generator worked like in PERL: If You use the random function without having called srand ever before in a script, srand is invoked before (and automatically with a nice seed, hopefully). I suggest that one should do something like this: <pre> if (!$GLOBALS["IHaveCalledSrandBefore"]++) { srand((double) microtime() * 1000000); } </pre> (Depending on the situation, one might also work with a static variable instead) http://php.net/manual/en/function.srand.php

« previous php.notes (#142398) next »