上传具有随机名称但缺少扩展名的文件

时间:2013-12-21 06:40:06

标签: php uploading

我正在尝试制作一个上传脚本,因此当用户上传某些内容时,它会保存到uploads文件夹中。我在上传图片时遇到类似名称的问题,所以我尝试了下面给出的方法将文件重命名为随机数,但我遇到的问题是图像名称中缺少点(.)。

旧脚本:

  move_uploaded_file($_FILES["image_file"]["tmp_name"],
  "uploads/" . $_FILES["image_file"]["name"]);

将文件重命名为随机数的新脚本:

$newfilename = rand(1,99999) . end(explode(".",$_FILES["image_file"]["name"]));
move_uploaded_file($_FILES["image_file"]["tmp_name"], "uploads/" . $newfilename);

我想要像这样的文件名

41150.jpg

但它保存了像41150jpg

这样的文件

2 个答案:

答案 0 :(得分:3)

你错过了点:

$newfilename = rand(1,99999) . '.' . end(explode(".",$_FILES["image_file"]["name"]));

基本上你生成一个随机数,添加一个点来分隔扩展,然后用点切片原始文件名并取最后一部分(应该是扩展本身)。扩展名没有点,您可以将其添加到您已准备好的内容中。

不要忘记随机数不会生成唯一的文件名。您可能会覆盖旧文件。你拥有的文件越多,就会发生这种情况。

为避免这种情况,您可以使用随机数字(或与之一起)的时间戳。通过这种方式,您将确保文件名的每一秒都是唯一的:

$newfilename = time() . '_' . rand(100, 999) . '.' . end(explode(".",$_FILES["image_file"]["name"]));

时间戳和由下划线分隔的三个随机数应该没问题。

答案 1 :(得分:0)

将代码更改为:

$newfilename = rand(1,99999) . '.' . end(explode(".", $_FILES["image_file"]["name"]));