2015-05-26 193 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