我在上传文件时在PHP脚本中使用随机数字函数。因为我想避免覆盖具有相同名称的文件。所以下面是上传文件时使用的脚本药水。PHP在同一时间生成相同的随机数(以秒为单位)
$filename = rand(0,100000).strtolower($_FILES['file']['name']);
$dir="/file/upload/directory/".$filename;
move_uploaded_file($_FILES["user_file"]["tmp_name"], $dir);
此应用程序预计将有大量的并发用户。因此QA使用不同的自动化工具通过应用高并发访问来测试此应用程序。那点随机数似乎在同一秒内产生相同的值。
然后我们分别测试随机数,同一个随机数在同一时间被清楚地识别出来。
虽然在网上搜索一些帖子建议mt_rand()
但仍然是在毫秒级别相同。
有什么办法在PHP中以时间独立的方式生成随机数?
随机性不是保证唯一文件名的有效方法。由于生日悖论,你会很快得到碰撞。 – 2014-09-02 19:04:29
您可以对日期进行哈希处理并将其设置为文件的名称,因此它不会为其他文件具有相同的名称 – nosthertus 2014-09-02 19:04:49
如果您想要唯一的文件名,请使用'md5_file()'获取文件的哈希值并将其作为名称。或者至少使用像前5-10个字符的东西。有机会,你不会碰到这一点。这样做的好处是,如果你为一个文件命中相同的散列,它最有可能是同一个文件。 – 2014-09-02 19:05:16