2015-05-26 60 views
6

我想上传图片,但是我希望如果图片已经存在,那么我需要重命名该文件。当我尝试重命名文件后上载图像时,代码中出现问题。我正面临的问题的部分代码是。更名后,如果我赞同它被更改的文件的名称,但之后我不能够将图片上传到服务器将图片上传到服务器时重命名图片

if(file_exists($target_file)) 
    { 
     $new_filename = uniqid() . '.' . $fileData['imageFileType']; 
     rename($target_file, $new_filename); 
     if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) 
      { 
       $name=basename($_FILES["fileToUpload"]["name"]); 
       echo $name; 
      } 
     else 
      { 
       echo "Sorry, there was an error uploading your file."; 
      } 
    } 
else  
    { 
     if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) 
      { 
       $name=basename($_FILES["fileToUpload"]["name"]); 
       echo $name; 
      } 
     else 
      { 
       echo "Sorry, there was an error uploading your file."; 
      } 

    } 

,我有上传图片的整个代码是

<?php 
require 'connection.php'; 

$target_dir = "catpic/"; 
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
// Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) 
    { 
     $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
     if($check !== false) 
      { 
       //echo "File is an image - " . $check["mime"] . "."; 
       $uploadOk = 1; 
      } 
     else 
      { 
       echo "File is not an image."; 
       $uploadOk = 0; 
      } 
    } 

// Check file size 
if ($_FILES["fileToUpload"]["size"] > 500000) 
    { 
     echo "Sorry, your file is too large."; 
     $uploadOk = 0; 
    } 

// Allow certain file formats 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") 
    { 
     echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
     $uploadOk = 0; 
    } 

// Check if $uploadOk is set to 0 by an error 
if ($uploadOk == 0) 
    { 
     echo "Sorry, your file was not uploaded."; 
     // if everything is ok, try to upload file 
    } 
else 
    { 
     if(file_exists($target_file)) 
      { 
       $new_filename = uniqid() . '.' . $fileData['imageFileType']; 
       rename($target_file, $new_filename); 
       if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) 
        { 
         $name=basename($_FILES["fileToUpload"]["name"]); 
         echo $name; 
        } 
       else 
        { 
         echo "Sorry, there was an error uploading your file."; 
        } 
      } 
     else  
      { 
       if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) 
        { 
         $name=basename($_FILES["fileToUpload"]["name"]); 
         echo $name; 
        } 
       else 
        { 
         echo "Sorry, there was an error uploading your file."; 
        } 

      } 
    } 
?> 
+0

你能解释一下这个错误是什么吗? – Zgr3doo

+0

@ Zgr3doo错误是我的图像在重命名部分后没有上传。如果我第一次上传图片就没事了,但是如果我下次上传同样的图片,虽然它的名字被更改,但它不会上传 – roy

+0

您在$ new_filename中缺少路径 - 也可能是个好主意它通常用于文件上传脚本,并将随机散列作为名称分配给上传的文件,并将该散列和文件的id一起保存到数据库中。 – Zgr3doo

回答

2

您在$ new_filename缺少路径

比较这两个声明

$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); 

$new_filename = uniqid() . '.' . $fileData['imageFileType']; 

我UPD阿婷我的答案,以配合您的建议尝试

$new_filename = uniqid() . '.' . $fileData['imageFileType']; 
rename($target_file, $new_filename); 

$new_filename = $target_dir . uniqid() . '.' . $imageFileType; 
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $new_filename)){ 

更换你的代码的这部分只需添加$ TARGET_DIR,只是删除重命名()作为其不需要

基本上是什么你在之前的代码中当上传时存在文件时你曾尝试使用rename()重命名旧文件,这可能不会成功,之后你试图用相同的冲突名称上传新文件

+0

我也试过这个,但我的条件是要去其他部分,即使文件已经存在 – roy

+0

我看到,当文件已经存在时,你重命名旧文件,之后你仍然尝试上传到target_file是否正确? – Zgr3doo

+0

你可以检查重命名是否成功吗? – Zgr3doo