Переименовать загружает файла php

Переименование при загрузке через форму

Помогите пожалуйста, все перерыл уже! Как сделать переименование файла при загрузке через форму. Например,
Пользователь загружает файл с произвольным именем .doc и ему нужно ввести данные в 4 формы:
Форма1: группа
Форма2: фамилия
форма3: имя
форма4: номер
..
То есть загруженный на сервер файл должен иметь следующее имя: группа_фамилия_имя_номер.doc
Напишите пожалуйста скрипт..

Переименование файлов при загрузке
Необходимо переименовывать загруженный файл, если выбрана переменная newfilename $id = $_GET;.

Ресайз фотки при загрузке на сайт и её переименование
Привет всем!Помогите мне пожалуйста если можете.2 недели как изучаю PHP, до этого изучал HTML,и вот.

Ошибка при добавлении данных в бд через форму
вот action: <? require_once ‘../config.php’; $name_post = $_POST; $cat = $_POST; .

Ошибка при добавлении записи через форму в БД
Делаю админ-панель на сайте и возникла проблема, вылетает ошибка при попытке отправить данные. .

Эксперт PHP

$filename = $group . '_' . $lastname . '_' . $firstname . '_' . $number . '.' . $extension;

Эксперт PHP

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
form method="post" action="main.php"> strong>Номер Группы:strong>br /> input type="text" name="group" size="30"/> br /> strong>Тип работы (Л-лабораторная, П-практическая, К-курсовая, Д-доклад):strong>br /> input name="type" type="text" size="30" /> br /> strong>Код Дисциплина (Пример: СБД)strong>br /> input name="disc" type="text" size="30" /> br /> strong>Номер семестраstrong>br /> input name="sem" type="text" size="30" /> br /> strong>Номер работыstrong>br /> input name="number" type="text" size="30" /> br /> strong>Ваша Фамилия:strong>br /> input name="lastname" type="text" size="30" /> br /> strong>Ваше имя:strong>br /> input name="firstname" type="text" size="30" /> br /> form> form action="main.php" method="post" enctype="multipart/form-data"> input type="file" name="filename">br> input type="submit" value="Загрузить">br> form>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
 $allowed_filetypes = array('.doc','.docx'); // допустимые форматы. $max_filesize = 524288; // Допустимый размер загружаемого файла. $upload_path = 'upload/'; // Директория для загрузки. $new_name = "000001"; // Новое имя для файла.(типа получено динамически =) ) $filename = $group . '_' . $lastname . '_' . $firstname . '_' . $number . '.' . '.doc'; $ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); if(strlen($_FILES['filename']['tmp_name'])  1) die('Сперва укажите файл для загрузки.'); if(!in_array($ext,$allowed_filetypes)) die('Данный формат не поддерживается.'); if(filesize($_FILES['filename']['tmp_name']) > $max_filesize) die('Файл превышает допустимые значения.'); if(!is_writable($upload_path)) die('Директория закрыта от записи. обратитесь к системному администратору.'); if(move_uploaded_file($_FILES['filename']['tmp_name'],$upload_path . $filename)) die('Ваш фаил успешно загружен. . $upload_path . $filename . '">смотреть 
загрузить ещё'
); else echo 'При загрузке возникли ошибки. Попробуйте ещё раз.'; ?>

Эксперт PHP

Лучший ответ

Сообщение было отмечено ArtemSpb как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
form method="post" action="main.php" enctype="multipart/form-data"> strong>Номер Группы:/strong>br /> input type="text" name="group" size="30"/> br /> strong>Тип работы (Л-лабораторная, П-практическая, К-курсовая, Д-доклад):/strong>br /> input name="type" type="text" size="30" /> br /> strong>Код Дисциплина (Пример: СБД)/strong>br /> input name="disc" type="text" size="30" /> br /> strong>Номер семестра/strong>br /> input name="sem" type="text" size="30" /> br /> strong>Номер работы/strong>br /> input name="number" type="text" size="30" /> br /> strong>Ваша Фамилия:/strong>br /> input name="lastname" type="text" size="30" /> br /> strong>Ваше имя:/strong>br /> input name="firstname" type="text" size="30" /> br /> input type="file" name="file">br> input type="submit" value="Загрузить">br> /form>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
 /** * Функция для получения данных из POST * @param string $key - ключ нужно переменной * * @return значение по ключу */ function post( $key ){ return isset( $_POST[$key] ) ? trim( $_POST[$key] ) : null; } # Допустимые форматы файлов $allowed_filetypes = array( 'doc', 'docx' ); # Допустимый размер загружаемого файла $max_filesize = 1382288; # Директория для загрузки $upload_path = 'upload/'; # Массив для получения данных от пользователя $data = array(); # Получаем данные из формы $data['group'] = post('group'); $data['lastname'] = post('lastname'); $data['firstname'] = post('firstname'); $data['number'] = post('number'); $file = $_FILES['file']; # Тут можно проверить, заполнены ли данные # . # Получаем расширение файла $extension = pathinfo( $file['name'], PATHINFO_EXTENSION ); # Формируем имя файла $filename = implode( '_', $data ) . '.' . $extension; if( $file['error'] ) die('Сперва укажите файл для загрузки.'); if( !in_array($extension, $allowed_filetypes) ) die('Данный формат не поддерживается.'); if(filesize($file['tmp_name']) > $max_filesize) die('Файл превышает допустимые значения.'); if( !is_writable($upload_path) ) die('Директория закрыта от записи. Обратитесь к системному администратору.'); if( move_uploaded_file($file['tmp_name'], $upload_path . $filename)) die('Ваш файл успешно загружен. . $upload_path . $filename . '">смотреть 
загрузить ещё'
); else echo 'При загрузке возникли ошибки. Попробуйте ещё раз.'; ?>

Но если укажите там кириллические символы — то файл сохранится с некорректным именем, в таком случае имя нужно будет перекодировать в кодировку, которую использует файловая системы Вашей операционной системы.

Источник

Как изменить имя файла при загрузке?

необходимо при загрузке файла на сервер изменить имя файла. например есть изображение image.jpg надо что бы при загрузке изменилось на idпользователя_item_image.jpg
вот код для загрузки файла на сервер

  function upload($filename, $pach) < $idUser=JUserHelper::getProfile()->id; // устанавливаем директорию загрузки файла $uploadfile = $pach.basename($_FILES[$filename]['name']); if(!empty($filename)) < // Ограничения размера загружаемого файла if($_FILES[$filename]['size'] >1024*2*1024) < return("Размер файла превышает 2 мегабайта"); >// Проверяем загружен ли файл if(is_uploaded_file($_FILES[$filename]['tmp_name'])) < // Если файл загружен успешно, перемещаем его // из временной директории в конечную if(copy($_FILES[$filename]['tmp_name'],$uploadfile)) < return("OK! Файл успешно загружен."); >else < return(''/*. $_FILES[$filename]['tmp_name'].$pach */.$_FILES[$filename]['name'].' - не является правильно загруженным файлом или не может быть перемещён из временной директории.'); > > else < switch($_FILES[$filename]['error']) < case 1: echo "Размер файла превышает допустимый."; break; case 2: echo "Размер файла превышает допустимый."; break; case 3: echo "Загружаемый файл был получен только частично."; break; case 4: echo "Файл не был загружен!"; break; >> > else < return('Не указан файл для загрузки!'); >> ?> ?>

Ivanq

if(copy($_FILES[$filename]['tmp_name'], "myid_or_something_else_$uploadfile")) return("OK! Файл успешно загружен.");

т.е. для джумлы актуально будет
$idUser=JUserHelper::getProfile()->id;
if(copy($_FILES[$filename][‘tmp_name’], «$idUser_item_$uploadfile»))
return(«OK! Файл успешно загружен.»);

Ivanq

Ivanq: // устанавливаем директорию загрузки файла
$uploadfile = $pach.basename($_FILES[$filename][‘name’]);

Источник

Как переименовать файл из input?

Как переименовать файл из input перед отправкой на сервер?

с помощью $_FILES я могу получить инфу про файл. Но как мне переименовать его до того как я его отправлю на сервер?

DevMan

пользователь допустим загрузил файл с некорректным именем, я хочу переименовывать все загружаемые файлы

DevMan

Alex_mersvg, так переименовывайте, что вам мешает.
файл итак загружается на сервер с рандомным именем.

Есть 3 способа. Один правильный и 2 неправильных.

Первый способ (правильный) — это переименовать полученный файл непосредственно в php-обработчике.

Второй способ, отправка формы при помощи AJAX. В этом случае вы можете сами указывать имена для отправляемых файлов, для этого понадобится использовать конструктор FormData для того, чтобы собрать свой вариант формы.

Третий способ, подменять файл на лету непосредственно в поле выбора файла:

document.querySelector('input[type="file"]').addEventListener('change', function() < if (this.files.length >0) < var file_name = 'Новое название.jpg'; if (this.files[0].name !== file_name) < var new_file = new File([this.files[0]], file_name, ); new_file.name = file_name; var dt = new DataTransfer(); dt.items.add(new_file); this.files = dt.files; > > >);

Думаю вполне понятно, что 2 последних способа неправильные. Да, они буду работать, но так обычно не делают.

Источник

Как переименовать файл, если такой файл есть при загрузке?

Здравствуйте. Загружаю файл и проверяю, есть ли такой файл:

$filename = "upload/".$_FILES["filename"]["name"]; if (file_exists($filename)) < echo "Файл $filename существует"; move_uploaded_file($_FILES["filename"]["tmp_name"], "upload/".$_FILES["filename"]["name"]); >

Подскажите, как дописать хоть куда-нибудь в название файла «+1»?
Чтобы, если файл называется good.jpg — закачался бы файл 1good.jpg или good1.jpg
Если файл 1good.jpg есть — закачался бы файл 2good.jpg и т.д.
То есть, чтобы работало по принципу «новая папка 1», «новая папка 2»

RomaZveR

Это совершенно небезопасный и непонятно зачем нужный велосипед. Генерируйте наименования загружаемых файлов сами, строго следите за расширением.

$valid_formats = [ 'jpg', 'jpeg', 'png', 'gif', 'bmp' ]; $ext = pathinfo($_FILES['filename']['name'], PATHINFO_EXTENSION); if (!isset($valid_formats[$ext])) < return 'error'; >$filename = md5($_FILES['filename']['name'].uniqid()). '.' .$ext; if (!is_file('upload/'.$filename)) < move_uploaded_file($_FILES['filename']['tmp_name'], 'upload/'.$filename); >

1) Получить название файла
2) Записать в переменную, отбросив расширение «.jpg», только делайте внимательно, чтобы отбрасывало именно разрешение, а не так, чтобы у вас файл kartinka.leto.bmp и вы отбросили .leto.bmp
3) Если приписанного числа нет, то добавить в конце 1, если изначально file1.bmp, то отрезать единицу (или любое другое число), прибавить к ней +1 и подписать обратно
4) Приклеить обратно расширение
5) .
6) PROFIT!
P>S> В 3 пункте, добавляйте через _1, чтобы проще было улавливать разницу между названием файла и его копией, чтобы получалось file.bmp file1.bmp, file_1.bmp file1_1.bmp чтобы видеть разницу между ними

qqignatqq, на сколько мне известно, нет в пхп функции, которая сама разбирает, переименовывает и собирает имя файла обратно по шаблону

Мне не важно, где именно он пропишет цифру. Главное, чтобы в расширение он её не писал. Пусть будет «1 новая папка», «2 новая папка». Этого он тоже не может?

qqignatqq,
$NewFilename = ‘1_’ . $Filename

Но при повторной загрузке файла в 5ый или 6ой раз, вы об этом не узнаете, если вы хотите, чтобы было видно все загрузки, то надо писать проверку имени файла, при наличии 1_file улавливать число перед именем, брать его, ++1, и отдавать имя.
Это не костыли, это грамотно реализованные функции. При этом не забывайте делать проверку, чтобы в форму загрузки вам не записали и не отправили чего лишнего, в виде исполняемого файла с вредоносным кодом

Источник

Читайте также:  Html table с прокруткой
Оцените статью