我在上传文件时在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中以时间独立的方式生成随机数?
答案 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);
即使循环效率低下。这将确保不会发生文件覆盖。