Jósolható a PHP rand() függvénye win32 alatt

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.

Új hozzászólás