PHP覆盖上传的图像

时间:2014-06-15 06:11:16

标签: php file-upload

我正在尝试使用Google搜索的一些文件上传代码。

现在问题是当我尝试上传图片时,如果它已经在文件夹中,那么它的过度写入和问题就出现了。我从herehere as well尝试代码,但我遇到了一些错误。

这是我的代码。我可以在这段代码中使用一些额外的名称上传文件来停止写入现有文件吗?

if(isset($_REQUEST['main']))
{

    $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"] < 20000) && in_array($extension, $allowedExts))  {*/

        if ($_FILES["file"]["error"] > 0) {
            echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
        } else {

            if (file_exists("upload/" . $_FILES["file"]["name"])) {
                echo $_FILES["file"]["name"] . " already exists. ";
            } else {
                if( move_uploaded_file($_FILES["file"]["tmp_name"], "../img/catalog/" . $_FILES["file"]["name"]) ){
                    $filepath = "img/catalog/" . $_FILES["file"]["name"];
                }else{
                    echo $_FILES["file"]["name"]." unable to store";
                }
            }
        /*}
      } else {
        echo "Invalid file";
      }*/
}
    $main = $_REQUEST['main'];
    $sql="INSERT INTO image VALUES ('', '$filepath', '$main')";

    if (!mysqli_query($con,$sql)) {
      die('Error: ' . mysqli_error($con));
    }
    echo "1 record added";
}

2 个答案:

答案 0 :(得分:0)

您可以使用file_exists检查文件是否存在。

如果存在,请在文件名中添加一些额外字符。然后你可以保存它。

这是一个生成随机字符的函数:

function randomString($length) {
 $str="";
 $chars = "subinsblogabcdefghijklmanopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 $size = strlen($chars);
 for($i = 0;$i < $length;$i++) {
  $str .= $chars[rand(0,$size-1)];
 }
 return $str;
}

替换代码:

if( move_uploaded_file($_FILES["file"]["tmp_name"], "../img/catalog/" . $_FILES["file"]["name"]) ){
  $filepath = "img/catalog/" . $_FILES["file"]["name"];
}else{
   echo $_FILES["file"]["name"]." unable to store";
}

with:

$newLocation = "../img/catalog/" . $_FILES["file"]["name"];
if(file_exists($newLocation)){
   $newLocation .= randomString(10); // We append 10 new characters
}

if( move_uploaded_file($_FILES["file"]["tmp_name"], $newLocation) ){
   $filepath = str_replace("../img", "img", $newLocation); // make File Path starting with img/
}else{
   echo $_FILES["file"]["name"]." unable to store";
}

以上代码将检查文件是否存在。如果是,则将一串 10个随机字符附加到文件名并存储在目标文件夹中。

答案 1 :(得分:0)

你没有提到你的问题,但我认为你错过了

中的一点
  

if else

一部分。这样写:

   if (file_exists("upload/" . $_FILES["file"]["name"])) {
            echo $_FILES["file"]["name"] . " already exists. ";
$_FILES["file"]["name"] = $_FILES["file"]["name"].$your_new_number;
            }
                if( move_uploaded_file($_FILES["file"]["tmp_name"], "../img/catalog/" . $_FILES["file"]["name"]) ){
                    $filepath = "img/catalog/" . $_FILES["file"]["name"];
                }else{
                    echo $_FILES["file"]["name"]." unable to store";
                }
            }