2015-05-26 14 views
6

Próbuję przesłać obraz, ale chcę, aby jeśli obraz już istnieje, muszę zmienić nazwę pliku. Problem w moim kodzie pojawia się, gdy próbuję przesłać obraz po zmianie nazwy pliku. część kodu, w której stoję przed problemem jest. po zmianie nazwy gdybym echo nazwy pliku robi się zmieniło, ale po nim nie jestem w stanie przesłać obraz do serwerazmienić nazwę obrazu podczas przesyłania go na serwer

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

    } 

cały kod, który mam do przesyłania obrazu jest

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

możesz wyjaśnić nieco więcej, jaki jest błąd? – Zgr3doo

+0

@ Zgr3doo Błąd polega na tym, że mój obraz nie jest przesyłany po zmianie nazwy. jeśli przesłać obraz po raz pierwszy, to jest w porządku, ale jeśli prześlę to samo zdjęcie następnym razem, to nie zostanie przesłane, chociaż jego nazwa zostanie zmieniona – roy

+0

Brakuje ścieżki w nazwie $ new_filename - również dobrze jest użyć sposobu który jest powszechnie stosowany w skryptach do wysyłania plików i przypisuje losowy hash jako nazwę do przesłanych plików i zapisuje ten skrót do bazy danych wraz z identyfikatorem pliku. – Zgr3doo

Odpowiedz

2

brakuje ścieżki w $ new_filename

porównać obie deklaracje

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

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

jestem UPD ating moją odpowiedź, aby dopasować swoją sugestię spróbować zastąpić ten fragment kodu

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

z

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

wystarczy dodać $ target_dir i po prostu usunąć rename() jako nie potrzebne

zasadzie co zrobiłeś to w poprzednim kodzie, gdy plik istniał podczas przesyłania, próbowałeś zmienić nazwę starego pliku przy pomocy rename(), które prawdopodobnie się nie powiodło, a potem próbujesz załadować nowy plik o tej samej sprzecznej nazwie.

+0

Próbowałem tego również, ale mój stan będzie się rozdzielał tylko wtedy, gdy plik już istnieje. – roy

+0

Widzę, że gdy plik już istnieje, zmieniasz nazwę starego pliku, a potem nadal próbujesz przesłać do pliku docelowego, czy to prawda? – Zgr3doo

+0

czy możesz sprawdzić, czy zmiana nazwy zakończyła się powodzeniem? – Zgr3doo

Powiązane problemy