- php tippek
- rand
- windows
A weblabor php listáján hívta fel Fejes Dévid a figyelmet arra, hogy nála bizony fúrcsán viselkedik a php rand() függvénye. Akkor is utánanéztem, a dolognak, de most megint belefutottam a problémába.
Itt a teszt script (Fejes Dávid munkája):
<?php
header ("Content-type: image/png");
$im = @imagecreatetruecolor(512, 512) or die("Cannot Initialize new GD image stream");
$white = imagecolorallocate($im, 255, 255, 255);
for($y=0;$y<512;$y++){
for($x=0;$x<512;$x++){
if(rand(0,1)){
imagesetpixel($im, $x, $y, $white);
}
}
}
imagepng($im);
imagedestroy($im);
?>
Ez a program windows rendszereken ilyen kimenetet ad:
Pedig valami ilyet kellene neki:
Ráadásul, ha egyszer sem seed-elünk, azaz nem hívunk srand()-ot, és legalább 512x512 képet generálunk, akkor teljes mértékben ismétlődik: újragenerálva, pontosan ugyanazt a képet kapjuk!
A megoldás, ha rand() helyett mt_rand()-ot használunk, vagy ha minden rand() előtt hívunk egy srand()-ot is. (Nem elég a program futás elején az srand, minden rand előtt hívni kell!)
Megnéztem, kis kedvencemben is mindenhol mt_rand()-ot használnak.