Samo sam pogresno napisao, na isto sam mislio
BTW, evo nekih RAZOCARAVAJUCIH rezultata.
Koristio sam funkciju array_rand (), prvi parametar je array:
PHP kôd:
$a = array ('0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
drugi parametar, naravno 8.
Iako sam seed-ovao (navodno posle PHP 4.2. ne mora ni to) već posle 1000 kodova počeo sam da dobijam enormno mnogo duplikata, koji su se ponavljali čak i desetak puta. Iako sam stavio set_limit_time (180); skript je pucao, a uspeo je da ubaci samo 26 000 kodova.
Zatim sam ponovo pokrenuo script, još gore. Ubacio je za 180 sekundi samo 4 000 novih kodova. Šta to znači?
PHP random funkcije su žešće sranje?
kod je izgledao ovako:
PHP kôd:
srand((float) microtime() * 10000000);
$count_total = 300000; // koliko kodova da generise
$len = 8; // dužina koda u karakterima
$a = array ('0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
for ($i = 1; $i <= $count_total; $i++)
{
$s = "";
$rand_keys = array_rand($a, $len);
foreach ($rand_keys as $key => $val)
{
$s .= $a[$val];
}
$result = mysql_query('insert into kodovi values("'.$s.'")');
if (!$result)
{
srand((float) microtime() * 10000000);
echo mysql_error()."\r\n";
$i--;
}
}
I to je bilo žešće sranje od scripta jer je konstantno generisao identične kodove. Kako i zašto, nemam pojma.
A onda sam pomislio da nije u pitanju neki cache ili nešto, pošto je broj novih kodova pri svakoj novoj egzekicuji scriptova bio sve manji. Dodao sam
shuffle($a); u ovom delu:
PHP kôd:
if (!$result)
{
shuffle($a);
srand((float) microtime() * 10000000);
echo mysql_error()."\r\n";
$i--;
}
Znači, kada god naidje na duplikat, uradi
shuffle().
I tada je prodadilo kako treba. Prosečno je generisao po 300 k kodova za oko 100 sekundi.
Predlog sa držanjem u memoriji bi očigledno propao, ništa ne bi upisao pre završetka scripta.