2015-02-07 3 views
0

В настоящее время мой код загружает файл изображения с именем изображения, отправленного пользователем. Теперь, очевидно, я хотел бы изменить это, чтобы избежать проблем с перезаписью. Теперь я посмотрел на некоторые другие предложения, но я не могу заставить его работать с моим кодом (я изучал PHP всего несколько месяцев). Итак, могли бы вы, ребята, помочь мне? Вот код загрузкиКак изменить имя файла после загрузки PHP

<?php 
$target_dir = "avatars/"; 
$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 if file already exists 
if (file_exists($target_file)) { 
    echo "Sorry, file already exists."; 
    $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 (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { 
     //echo "The file ". basename($_FILES["fileToUpload"]["name"]). " has been uploaded."; 
    } else { 
     echo "Sorry, there was an error uploading your file."; 
    } 
} 
?> 

Я думаю, что я должен был бы изменить move_uploaded_file код? Спасибо за любую помощь!

+0

Похоже, ваш сценарий уже обнаруживает. если указано одно и то же имя. –

+0

Да, но он берет имя исходного изображения, я хочу изменить имя изображения после загрузки, чтобы изображения не переписывали друг друга. – MyNameIsNotSoCool

+0

'$ target_file' хорошо, что имя и местоположение. «дешевый» способ избежать дублирования заключается в добавлении метки времени к ее имени (не делайте этого на занятом сайте) –

ответ

4

Изменить это:

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

Для этого:

$rand = rand(10000000, 999999999); 
$time = time(); 
$file_name = $rand.$time.$_FILES["fileToUpload"]["name"]; 
$target_dir = "avatars/"; 
$target_file = $target_dir . $file_name; 
+0

, используя временную метку 'time()' с rand или by-itself - это еще одна идея. –

+0

@ Дагон Да, это работает еще лучше. Будет обновлен код для объединения двух концепций. – three3

+0

Спасибо :) Это решило! – MyNameIsNotSoCool

1

Переименовать файл, прежде чем переместить его (если он выходит)

// Check if file already exists 
if (file_exists($target_file)) { 
    $temp = explode(".", $_FILES["fileToUpload"]["name"]); //getting the image extension 
    $target_file = $target_dir . rand(1,99999).'.'.end($temp); 
    $uploadOk = 0; 
} 
+0

@ Дагон, это до того, как ты стал слепым? – julekgwa

+0

@ Дагон все еще находится во временной папке. – julekgwa

+0

@Dagon вы видите, что делает мой код, проверяет, существует ли изображение в данном каталоге, дайте ему новое имя, затем вы можете использовать новое имя при перемещении файла. – julekgwa

Смежные вопросы