PHP同时生成相同的随机数(以秒为单位)

时间:2014-09-02 18:57:20

标签: 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中以时间独立的方式生成随机数?

1 个答案:

答案 0 :(得分:0)

随时间生成随机数。但对于这个特殊问题,我们需要编写几行代码。如果我们检查文件是否存在并将增量编号应用于文件名,那么它将是一个固定的解决方案。代码可以如下。

$filename = strtolower($_FILES['file']['name']);
$dir="/file/upload/directory/";
$i = 1;

while(is_file($dir . $i . $filename))
{
   $i++;
}

move_uploaded_file($_FILES["user_file"]["tmp_name"], $dir . $i . $filename);

即使循环效率低下。这将确保不会发生文件覆​​盖。