Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как изменить имя загружаемого файла на сервер?
 
 автор: lElectroHardl   (26.07.2010 в 12:41)   письмо автору
 
 

Есть скрипт обработчика загрузки файла на сервер:
$allowed_filetypes = array('.jpg','.gif');
$max_filesize = 50000;
$upload_path = '../img/';
$filename = $_FILES['img']['name'];
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
if(!in_array($ext,$allowed_filetypes))
die('Данный тип файла не поддерживается.');
if(filesize($_FILES['img']['tmp_name']) > $max_filesize)
die('Фаил слишком большой.');
if(!is_writable($upload_path))
die('Невозможно загрузить фаил в папку. Установите права доступа - 777.');
if(move_uploaded_file($_FILES['img']['tmp_name'],$upload_path . $filename))
echo 'Ваш фаил успешно загружен';
else
echo 'При загрузке возникли ошибки. Попробуйте ещё раз.';

Как мне сделать так, что бы файл загружался с нужным мне именем? Например, человек выбирает файл с именем "ochen_horoshiy_film.jpg", а на сервер он загружался с таким именем: "film_124.jpg".

  Ответить  
 
 автор: Valick   (26.07.2010 в 12:47)   письмо автору
 
   для: lElectroHardl   (26.07.2010 в 12:41)
 

$filename = $_FILES['img']['name'] ;
взамест $_FILES['img']['name'] присваивайте нужное имя файла "film_124.jpg"
либо сразу указывайте в функции move_uploaded_file

  Ответить  
 
 автор: lElectroHardl   (26.07.2010 в 13:09)   письмо автору
 
   для: Valick   (26.07.2010 в 12:47)
 

>>>либо сразу указывайте в функции move_uploaded_file
Вместо if(move_uploaded_file($_FILES['img']['tmp_name'],$upload_path . $filename)),
написал: if(move_uploaded_file($_FILES['img']['tmp_name'],$upload_path . "file_121212"))
Имя присваивается, а разрешение не присваивается.
В итоге получается файл: "file_121212", а не "file_121212.jpg"

  Ответить  
 
 автор: sim5   (26.07.2010 в 13:11)   письмо автору
 
   для: lElectroHardl   (26.07.2010 в 13:09)
 

Во первых надо узнавать тип файла, только никак не таким образом:
substr($filename, strpos($filename,'.'), strlen($filename)-1);

все это глупости, которые легко обойти.
Во вторых добавляйте расширение в имя по узнанному типу файла.

  Ответить  
 
 автор: lElectroHardl   (26.07.2010 в 14:48)   письмо автору
 
   для: sim5   (26.07.2010 в 13:11)
 

Все же не могу понять, что и где нужно изменить, что бы загружаемый файл менял имя на нужное?
Простите за свое непонимание...

  Ответить  
 
 автор: Valick   (26.07.2010 в 14:50)   письмо автору
 
   для: lElectroHardl   (26.07.2010 в 14:48)
 

я же Вам написал
$filename = $_FILES['img']['name'] ;

замените на:
$filename = "film_124.jpg"

  Ответить  
 
 автор: sim5   (26.07.2010 в 14:51)   письмо автору
 
   для: Valick   (26.07.2010 в 14:50)
 

А почему именно .jpg? И зачем эту переменную переопределять, пермещаете вы не ее.

  Ответить  
 
 автор: Valick   (26.07.2010 в 14:53)   письмо автору
 
   для: sim5   (26.07.2010 в 14:51)
 

а это разве мои проблемы? что автор спросил, то я и ответил
И зачем эту переменную переопределять, пермещаете вы не ее.
началось.....

  Ответить  
 
 автор: sim5   (26.07.2010 в 14:55)   письмо автору
 
   для: Valick   (26.07.2010 в 14:53)
 

Это ваши проблемы - $_FILES['img']['name'], это всего лишь информация к размышлению, не обязательно ее и использовать.

  Ответить  
 
 автор: Valick   (26.07.2010 в 15:00)   письмо автору
 
   для: sim5   (26.07.2010 в 14:55)
 

я человеку показал всего лишь куда сунуть имя файла которое он хочет, как он будет его формировать и как будет контролировать тип и расширение файла, повторюсь - это не мои проблемы...
$_FILES['img']['name'], - где я написал что его использовать обязательно?
где я написал что я перемещаю $filename?
мне что Вам опять кофе наводить? :)

  Ответить  
 
 автор: sim5   (26.07.2010 в 15:03)   письмо автору
 
   для: Valick   (26.07.2010 в 15:00)
 

Ну я и говорю, нафик он нужен, если формируем вообще свое имя? :)

  Ответить  
 
 автор: sim5   (26.07.2010 в 14:51)   письмо автору
 
   для: lElectroHardl   (26.07.2010 в 14:48)
 

move_uploaded_file (string filename, string destination)

Эта функция проверяет, является ли файл filename правильно загруженным файлом (что он был загружен через PHP-механизм HTTP POST). Если файл является правильным, он будет переименован в файл destination.

  Ответить  
 
 автор: Slo_Nik   (26.07.2010 в 15:59)   письмо автору
 
   для: sim5   (26.07.2010 в 13:11)
 

таким образом только расширение файла можно узнать, но не тип файла.

  Ответить  
 
 автор: sim5   (26.07.2010 в 16:05)   письмо автору
 
   для: Slo_Nik   (26.07.2010 в 15:59)
 

А мне то это зачем? Я так не проверяю тип файла.

  Ответить  
 
 автор: Valick   (26.07.2010 в 16:06)   письмо автору
 
   для: Slo_Nik   (26.07.2010 в 15:59)
 

естественно не Вам а автору топика http://www.php.net/manual/en/function.pathinfo.php http://ru.php.net/mime_content_type

  Ответить  
 
 автор: lElectroHardl   (26.07.2010 в 17:09)   письмо автору
 
   для: Valick   (26.07.2010 в 16:06)
 

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

  Ответить  
 
 автор: sim5   (26.07.2010 в 23:33)   письмо автору
 
   для: lElectroHardl   (26.07.2010 в 17:09)
 

Поиском не мало найти можно, сколько же их выкладывать. Да и что выкладывать. Начинайте загрузку проверкой ключа $_FILES['userfile']['error'], и если нет ошибок начинаете проверку загружаемого файла. Сперва, это тип файла, и для изображений можно использовать функцию getimagesize(), а не доверять расширению файла, которое можно подцепить к любому. Если это изображение, значит запоминаем расширение его типа. Далее проверки по условию: размер, расширение....
Если все ОК, формируем имя файла для хранения на диске, добавляя к нему ранее запомненное расширение. А вот оригинальное имя файла вполе может и пригодиться, но не как имя файла для хранения, а для информации или при скачивании файла пользователем. Если для изображения еще можно отдать пользователю файл werwefosajhdkaj23hekjfs.jpg, то для файлов, например, документа какого либо, такое название, это морока для пользователя.
Перемещайете файл в папку, и если файл успешно перемещен, записываете о нем информацию в базу. Вот и весь скрипт.

PS. die('Невозможно загрузить фаил в папку. Установите права доступа - 777.'); - это если вам, как для администратора сайта, а вот пользователя такие проблемы не должны волновать.
И не прекращать работу надо при ошибках, а возвращать пользователю форму для их исправления.

  Ответить  
 
 автор: lElectroHardl   (27.07.2010 в 10:49)   письмо автору
 
   для: sim5   (26.07.2010 в 23:33)
 

Спасибо, буду копать.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования