Bug #12455 Updated: Srand and shuffle give odd results
| From: | sulka at sulake dot com | Date: | Mon, 30 Jul 2001 10:25:29 +0000 |
| Subject: | Bug #12455 Updated: Srand and shuffle give odd results | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-61528@lists.php.net to get a copy of this message | ||
ID: 12455
User updated by: sulka@sulake.com
Reported By: sulka@sulake.com
Status: Open
Bug Type: *Math Functions
Old Operating System: SunOS 5.8 (Solaris)
Operating System: All
Old PHP Version: 4.0.4pl1
PHP Version: 4.0.4pl1, 4.0.6
New Comment:
The same problem also occurs on PHP 4.0.6 on Darwin/PPC.
System info:
PHP Version 4.0.6
System: Darwin localhost 1.3.7 Darwin Kernel Version 1.3.7:
Sat Jun 9 11:12:48 PDT 2001;
root:xnu/xnu-124.13.obj~1/RELEASE_PPC Power Macintosh
powerpc
Configure Command './configure' '--with-mysql=/usr/local'
'--with-apxs=/usr/sbin/apxs' '--with-zlib=/usr'
Server API: Apache
Apache Version: Apache/1.3.20
Previous Comments:
------------------------------------------------------------------------
[2001-07-30 05:17:09] sulka@sulake.com
A friend tried to run the test code on his machine and also
got 4 as a result. This is a Linux machine so my original
guess of this being Solaris specific isn't true. The only
real common denominator seems to be the PHP version? I'm
trying to get an upgrade to see if this is happening under
4.0.6.
Here's more info on the two servers this is occuring on:
PHP Version: 4.0.4pl1
System:
Linux xxx.com 2.2.14 #2 SMP Tue Mar 14 14:42:34 PST 2000
i686 unknown
Configure Command: './configure'
'--with-apxs=/usr/local/apache/bin/apxs' '--with-xml'
'--with-mcrypt' '--with-mysql' '--enable-track-vars'
Server API: Apache
System: SunOS yyy.com 5.8 Generic_108528-02 sun4u sparc
SUNW,UltraSPARC-IIi-cEngine
Configure Command: './configure'
'--with-apache=../apache_1.3.14'
'--with-mysql=/usr/local/mysql' '--with-ldap=/usr/local'
'--with-db3=/usr/local/BerkeleyDB.3.2' '--with-gd=../gd1.5'
'--with-ttf=/usr/local' '--enable-wddx'
------------------------------------------------------------------------
[2001-07-29 16:41:51] sulka@sulake.com
Well, when I run that code I get 4, not 500. Upping the
number of iterations doesn't help. I think the problem is
with the particular build (extension/OS combination). Any
way to debug this?
------------------------------------------------------------------------
[2001-07-29 14:26:39] rasmus@php.net
I don't think I understand what the problem is here. I tested your code with the following:
<?
function pwd() {
$password = "";
$array =
array('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',0,1,2,4,5,6,7,8,9);
srand ((double)microtime()*1000000);
shuffle(&$array);
for ($i=0; $i<6; $i++) { $password .= $array[$i]; }
return $password;
}
$i=0;
while($i<500) {
$password = pwd();
$a[$password] = $password;
$i++;
}
echo count($a);
?>
This always returns 500 which means that 500 unique passwords were always created.
------------------------------------------------------------------------
[2001-07-29 05:51:30] sulka@sulake.com
I'm using the following code to create random strings
(passwords):
$password = "";
$array =
array('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',0,1,2,4,
5,6,7,8,9);
srand ((double)microtime()*1000000);
shuffle(&$array);
for ($i=0; $i<6; $i++) { $password .= $array[$i]; }
Now, for some reason this seems to return only five
different values ever on the Solaris machine I'm running
the code on. And I'm not checking on the same run of the
script, this is based on accessing page with the script
through http and looking at the results for about 150
reloads on two different days.
This is the first time I'm sending a PHP report so I don't
know exactly what information to provide. Please ask for
more if as you see fit.
------------------------------------------------------------------------
Edit this bug report at http://bugs.php.net/?id=12455&edit=1