上传具有唯一名称的图像(PHP)

时间:2014-10-05 21:13:20

标签: php

我目前正在制作一个简单的上传脚本。

但是,我的用户从iPhone上传图像时遇到问题,因为iPhone将所有图像命名为“image.jpg”,并且您不能拥有两个同名图像。

有没有办法在下面的上传过程中为文件名添加随机字符串?我是PHP的新手!

$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 3000000000)
&& in_array($extension, $allowedExts)) {
  if ($_FILES["file"]["error"] > 0) {
  } else {
    if (file_exists("../../upload/" . $_FILES["file"]["name"])) {
    } else {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "../../upload/" . $_FILES["file"]["name"]);
      $image_link = 'http://www.martahedin.com/EveryLife/upload/' . $_FILES["file"]["name"];
   echo $image_link;
    }
  }
} else {
  echo "Invalid file";
}

4 个答案:

答案 0 :(得分:0)

在此行指定服务器端文件名:

move_uploaded_file($_FILES["file"]["tmp_name"],
  "../../upload/" . $_FILES["file"]["name"]);

如果要为该文件名添加唯一字符串,可以将其添加到该行。例如,一个选项可能只是在现有文件名前加上一个唯一的字符串:

move_uploaded_file($_FILES["file"]["tmp_name"],
  "../../upload/" . uniqid() . $_FILES["file"]["name"]);

答案 1 :(得分:0)

这是您修改的代码,以执行您的操作。将$ destination变量更改为您想要的任何格式。将$ uniquevalue更改为您希望用于唯一性的任何内容。

$allowedExts = array("gif", "jpeg", "jpg", "png");

// Get the file extension
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

// Get the file name without the extension
$filename = basename($_FILES["file"]["name"], ".$extension");

// Define your unique identifier - this example uses unix timestamp
$uniquevalue = time();

// Combine the above parts in the form you wish
$destination = $filename . '-' . $uniquevalue . '.' . $extension;

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 3000000000)
&& in_array($extension, $allowedExts)) {
  if ($_FILES["file"]["error"] > 0) {
  } else {
    if (file_exists("../../upload/" . $_FILES["file"]["name"])) {
    } else {
      // Changed $_FILES["file"]["name"] to $destination

      move_uploaded_file($_FILES["file"]["tmp_name"],
      "../../upload/" . $destination);
      $image_link = 'http://www.martahedin.com/EveryLife/upload/' . $destination;
   echo $image_link;
    }
  }
} else {
  echo "Invalid file";
}

答案 2 :(得分:0)


您可以更改此部分代码

move_uploaded_file($_FILES["file"]["tmp_name"], "../../upload/" . $_FILES["file"]["name"]);

通过

move_uploaded_file($_FILES["file"]["tmp_name"], "../../upload/" . uniqid() . "_" . $_FILES["file"]["name"]);

希望有所帮助

答案 3 :(得分:-1)

如果您只想拥有不同的文件名,请尝试: 兰特(0,9999)

像这样:

 move_uploaded_file($_FILES["file"]["tmp_name"],
      "../../upload/" .rand(0,99999). $_FILES["file"]["name"]);

更新:

$newName = rand(0,99999). $_FILES["file"]["name"];

move_uploaded_file($_FILES["file"]["tmp_name"],
      "../../upload/" . $newName);

$image_link = 'http://www.martahedin.com/EveryLife/upload/' . $newName;


   echo $image_link;