2015-05-26 14 views
6

Tôi đang cố gắng tải lên hình ảnh, nhưng tôi muốn rằng nếu hình ảnh đã tồn tại thì tôi cần đổi tên tệp. Sự cố trong mã của tôi phát sinh khi tôi cố gắng tải lên hình ảnh sau khi đổi tên tệp. một phần của mã mà tôi đang gặp phải vấn đề là. sau khi đổi tên nếu tôi vang tên của tập tin nó được thay đổi, nhưng sau đó tôi không thể tải hình ảnh lên máy chủđổi tên hình ảnh trong khi tải nó lên máy chủ

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."; 
      } 

    } 

toàn bộ mã mà tôi có để tải lên hình ảnh là

<?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

bạn có thể giải thích thêm một chút về lỗi không? – Zgr3doo

+0

@ Zgr3doo lỗi là hình ảnh của tôi không được tải lên sau phần đổi tên. nếu tôi tải lên hình ảnh lần đầu tiên thì tốt nhưng nếu tôi tải lên cùng một hình ảnh vào lần tiếp theo thì nó không được tải lên mặc dù tên của nó bị thay đổi – roy

+0

Bạn thiếu đường dẫn trong $ new_filename của mình - cũng có thể là ý tưởng hay khi sử dụng thường được sử dụng trong các tệp tải lên tệp và chỉ định băm ngẫu nhiên làm tên cho tệp được tải lên và lưu băm này vào cơ sở dữ liệu cùng với id của tệp. – Zgr3doo

Trả lời

2

Bạn thiếu đường dẫn trong $ NEW_FILENAME

so sánh cả hai tờ khai

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

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

tôi UPD ating câu trả lời của tôi để phù hợp với đề nghị của bạn cố gắng để thay thế phần này của mã của bạn

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

với

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

chỉ cần thêm $ target_dir và chỉ cần xóa đổi tên() vì nó không cần thiết

cơ bản những gì bạn đã làm trong mã trước khi tệp tồn tại trong khi tải lên, bạn đang cố đổi tên tệp cũ bằng cách đổi tên() có thể không thành công và sau đó bạn đang cố gắng tải lên tệp mới có cùng tên xung đột

+0

tôi đã thử điều này nhưng tình trạng của tôi sẽ chỉ khác phần ngay cả khi tệp đã tồn tại – roy

+0

Tôi thấy rằng khi tệp đã tồn tại, bạn đổi tên tệp cũ và sau đó bạn vẫn cố gắng tải lên target_file là đúng? – Zgr3doo

+0

bạn có thể kiểm tra xem đổi tên thành công hay không? – Zgr3doo

Các vấn đề liên quan