Переименуйте файл, если он уже существует
Я пытаюсь загрузить файл и переименовать его, если он уже существует. Я хочу сделать так, чтобы при загрузке одного и того же файла имя просто добавляло 1, затем 2, затем 3 и так далее.
Пример: если файл "file" существует, то новый файл должен быть "file1", а затем следующий"file2".
Я видел несколько примеров в сети, но ничего, что я мог бы найти подходящим для моего кода (noob)
Теперь это мой код:
$id = $_SESSION['id'];
$fname = $_FILES['dok']['name'];
if ($_FILES['dok']['name'] !=""){
// Checking filetype
if($_FILES['dok']['type']!="application/pdf") {die("You can only upload PDF files");}
// Checking filesize
if ($_FILES['dok']['size']>1048576) {die("The file is too big. Max size is 1MB");}
// Check if user have his own catalogue
if (file_exists("filer/".$id."/")) {
// Moving the file to users catalogue
move_uploaded_file($_FILES['dok']['tmp_name'],"filer/".$id."/".$fname);}
//If user don't have his own catalogue
else {
// Creates new catalogue then move the file in place
mkdir("filer/".$id);
move_uploaded_file($_FILES['dok']['tmp_name'],"filer/".$id."/".$fname); } }
Может кто-нибудь помочь мне, где я могу ввести код, который решает эту проблему проблема? Большое спасибо!
3 ответа:
$id = $_SESSION['id']; $fname = $_FILES['dok']['name']; if ($_FILES['dok']['name'] !=""){ // Checking filetype if($_FILES['dok']['type']!="application/pdf") { die("You can only upload PDF files"); } // Checking filesize if ($_FILES['dok']['size']>1048576) { die("The file is too big. Max size is 1MB"); } if(!is_dir("filer/".$id."/")) { mkdir("filer/".$id); } $rawBaseName = pathinfo($fname, PATHINFO_FILENAME ); $extension = pathinfo($fname, PATHINFO_EXTENSION ); $counter = 0; while(file_exists("filer/".$id."/".$fname)) { $fname = $rawBaseName . $counter . '.' . $extension; $counter++; }; move_uploaded_file($_FILES['dok']['tmp_name'],"filer/".$id."/".$fname); }
Но не забудьте защитить свой скрипт (например, смотрите комментарий Марка Б выше) , и, возможно, вы могли бы оптимизировать еще немного; -)
Итак, если папка существует:
file_exists("filer/".$id."/")
Проверьте, существует ли файл
file_exists("filer/".$id."/".$fname)
А затем, если это произойдет,
$fname = $fname . "(1)" // or some appending string
Таким образом, в конце вы измените свой код на:
// Check if user have his own catalogue if (file_exists("filer/".$id."/")) { while (file_exists("filer/".$id."/".$fname)) // Now a while loop $fname = "copy-" . $fname; // Prepending "copy-" to avoid breaking extensions // Moving the file to users catalogue move_uploaded_file($_FILES['dok']['tmp_name'],"filer/".$id."/".$fname);} //If user don't have his own catalogue else {
<form action="test.php" method="post" enctype="multipart/form-data"> Select file to upload: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload File" name="submit"> </form> <?php $id = $_SESSION['id']; $fname = $_FILES['fileToUpload']['name']; // Checking filesize if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], "uploads/".$id."/".$fname)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; }else { echo "Sorry, there was an error uploading your file."; } // Check file size$ if ($_FILES['fileToUpload']['size']>1048576) { die("The file is too big. Max size is 1MB"); } if(!is_dir("uploads/".$id."/")) { mkdir("uploads/".$id); } $rawBaseName = pathinfo($fname, PATHINFO_FILENAME ); $extension = pathinfo($fname, PATHINFO_EXTENSION ); $counter = 0; while(file_exists("uploads/".$id."/".$fname)) { $fname = $rawBaseName . $counter . '.' . $extension; $counter++; }; move_uploaded_file($_FILES['fileToUpload'] ['tmp_name'],"uploads/".$id."/".$fname); ?>