【问题标题】:Create random filename but check it's not already used创建随机文件名,但检查它尚未使用
【发布时间】:2021-04-07 10:24:24
【问题描述】:

我正在尝试将图像文件上传到服务器并在这样做时创建一个随机名称。我遇到的问题是,有时(过于频繁)它会创建相同的文件名,但会创建具有不同扩展名的文件。

我的上传代码如下,我要做的是添加一个检查以确保该名称未被使用但具有不同的扩展名。

示例 - da4fb5c6e93e74d3df8527599fa62642.jpg & da4fb5c6e93e74d3df8527599fa62642.JPG

if ($_FILES['file']['name']) {if (!$_FILES['file']['error']){
$name = md5(mt_rand(100, 200));
$ext = explode('.', $_FILES['file']['name']);
$filename = $name . '.' . $ext[1];
$destination = $_SERVER['DOCUMENT_ROOT'] . '/images/infopages/' . $filename; //change this directory
$location = $_FILES["file"]["tmp_name"];
move_uploaded_file($location, $destination);
echo '/images/infopages/' . $filename;
}else{
echo  $message = 'Ooops!  Your upload triggered the following error:  '.$_FILES['file']['error'];
}
}

感谢任何帮助。

【问题讨论】:

  • "...有时(过于频繁)它会创建相同的文件名..." - 您是否考虑过为您的算法添加随机性? 100 个数字的范围不允许有很大的摆动空间。您可以使用 UUID 来保证大规模的唯一性。

标签: php upload


【解决方案1】:

您可以结合使用 PHP uniqid 和 rand 函数。这样,您将永远不会得到重复的值。

$filename = uniqid (rand(1000000,9999999), true) '.' . $ext[1];

【讨论】:

  • 所以放下 - $name = md5(mt_rand(100, 200));并替换 $filename = $name 。 '。 . $ext[1]; $filename = uniqid (rand(1000000,9999999), true) '.' . $ext[1];
  • 我试过了,当时不让。不过现在已经完成了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 2012-03-02
  • 1970-01-01
相关资源
最近更新 更多