防止两个具有相同名称的图像替换帖子图像

时间:2016-12-10 22:06:47

标签: php html mysql phpmyadmin

我有这个表格

<form method="post">
    <input type="text" name="name">
    <input type="file" name="image">
    <button type="submit" name="submit">Submit</button>
</form>

它的PHP就像这样

if(isset($_POST['submit'])){
    $name = $_POST['name'];
    $image = $_FILES['image']['name'];
    $imageTmp = $_FILES ['image']['tmp_name'];

    move_uploaded_file($imageTmp, "../img/$image");

    $query = "INSERT INTO database(name, img) VALUES ('$name', '$img'")";}

现在在博客中,如果有人发布了一个主题并上传了名为[img1.png]的图片 然后我发布了另一个主题并上传了名为[img1.png]的图片,但它与他的形象完全不同,我将采取他的图像位置,我们的两个主题将具有相同的图像,我该如何解决这个问题?也许是一种随机化一个无法再输入的名字的方法?我的意思是,即使是随机名称也可以在数百万的机会中再次挑选,也许在命令中命名?我怎么能这样做?

6 个答案:

答案 0 :(得分:2)

$dest_file = rand(1, 10000) . round(microtime(true)) . '_' . $_FILES['image']['name'];
move_uploaded_file($_FILES['image'][`tmp_name`], $dest_file);

这可能是一种可靠的方法。

答案 1 :(得分:1)

在PHP中使用命令

$foo=mysql_insert_id();

在此之后将图像插入数据库(我假设您有自动增量索引)后,使用

  move_uploaded_file($imageTmp, "../img/".$foo."_".$image");

使用数据库中的ID加上原始名称移动到新文件..

答案 2 :(得分:0)

为每个帖子设置一些ID号 - 在图像文件名中使用该ID。例如,如果ID = 3,则img名称将为:“3_img1.png”

答案 3 :(得分:0)

使用以下方法为图像生成前缀:

http://php.net/manual/en/function.uniqid.php

答案 4 :(得分:0)

您可以使用uniqid()更改文件名,也可以使用date()microtime()创建文件名,这将创建唯一的文件名。



$name = $_POST['name'];
    $image = date('YmdHis'); // this is the name
    $imageTmp = $_FILES ['image']['tmp_name'];

    move_uploaded_file($imageTmp, "../img/$image");

    $query = "INSERT INTO database(`name`, `img`) VALUES ($name, $image)";

答案 5 :(得分:0)

如果文件已经存在,下面的代码将创建一个$ newname变量...例如

filename.bak.jpg - 将成为,filename_0123456789.bak.jpg,其中数字代表microtime ...未尝试运行代码,对不起,如果存在轻微错误。

// IF FILE ALREADY EXISTS
if (file_exists($name)){

  // GET FILENAME ADDON FROM MICROTIME
  $newtime = explode(' ', microtime());
  $newtime = $newname[1].$newname[0];

  // SEPERATE THE EXISTING FILENAME
  $temp = explode('.', $name);
  $temp[0]; // expecting filename
  $temp[1]; // expecting file extension

  // ASSEMBLE NEW FILENAME
  $newname = $temp[0].'_'.$newtime.'.'.implode('.', array_slice($temp, 1));

  unset($newtime);
  unset($temp);
}
// IF FILE ALREADY EXISTS