[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Переименование файла с сохранением расширения
P i L o T
Всем вечер добрый. Я относительно недавно стал делать менеджер файлов для своего сайтика. Написал скрипт отправки файла на сервер, а также скрипт переименования отправляемого файла. Проблема в том, что при переименовании файла теряется его расширение.
Пытался исправить проблему следующим образом

PHP
//Присваивание файлу нового имени
$_FILES["filename"]["name"] = $_POST["fname"];
//Определение нужного расширения для переименованного файла
 
  
if ($_FILES["filename"]["type"] === "video/mpeg")
  {
  
$_FILES["filename"]["name"] = $_FILES["filename"]["name"].".mpeg";
  }
  

  if (
$_FILES["filename"]["type"] === "image/bmp")
  {
  
$_FILES["filename"]["name"] = $_FILES["filename"]["name"].".bmp";
  }
  
  if (
$_FILES["filename"]["type"] === "image/gif")
  {
  
$_FILES["filename"]["name"] = $_FILES["filename"]["name"].".gif";
  }
  
  if (
$_FILES["filename"]["type"] === "image/jpeg")
  {
  
$_FILES["filename"]["name"] = $_FILES["filename"]["name"].".jpeg";
  }
  
  if (
$_FILES["filename"]["type"] === "image/pjeg")
  {
  
$_FILES["filename"]["name"] = $_FILES["filename"]["name"].".jpeg";
  }

  
  if (
$_FILES["filename"]["type"] === "application/pdf")
  {
  
$_FILES["filename"]["name"] = $_FILES["filename"]["name"].".pdf";
  }

  
  if (
$_FILES["filename"]["type"] === "application/msword")
  {
  
$_FILES["filename"]["name"] = $_FILES["filename"]["name"].".doc";
  }
  
  
  if (
$_FILES["filename"]["type"] === "text/html")
  {
  
$_FILES["filename"]["name"] = $_FILES["filename"]["name"].".html";
  }
//Расширение определено


или вот так:
PHP
switch ($_FILES["filename"]["type"])
{
case 
"image/pjeg" :
   
$_FILES["filename"]["name"] = $_FILES["filename"]["name"].".jpeg";
   break;
case 
"text/html":
   
$_FILES["filename"]["name"] = $_FILES["filename"]["name"].".html";
   break;
}


т.е. пытался дописать расширение при помощи сравнения $_FILES["filename"]["type"] с готовыми вариантами. Но у меня не работает ни один, ни другой.
Может кто знает в чем тут ошибка или как подругому реализовать распознавание расширение для файла?



Спустя 38 минут, 26 секунд (20.12.2008 - 20:26) FatCat написал(а):
1. Расширение лучше бы менять, иначе могут загрузить файлик с расширением .php или что похуже. А сопоставление имен делать через БД или через файл лога.

2. Если все же нужно получить расширение, можно попробовать что-то такого типа:
PHP
function get_extension ($file_name)
{
$file_name_arr = explode(".",$file_name);
 foreach($file_name_arr as $file_name_e)
 {
  $file_name = ".".$file_name_e;
 }
 return $file_name;
}

Спустя 54 минуты, 32 секунды (20.12.2008 - 21:20) Sylex написал(а):
Для менеджера файлов я понял все расширения нужны, если нет - можно ограничить.

Получить расширение файла, которое было изначально при загрузке файла:
PHP
$file_ext strrchr(basename($_FILES["filename"]["name"]), '.');


По нему можно проверять доступные, а также проверять MIME-тип.

Спустя 20 часов, 27 минут, 32 секунды (21.12.2008 - 17:48) P i L o T написал(а):
Спасибо всем, особенно Sylex'у за помощь! =) Расширение теперь остается нетронутым.)
Я так понял эта функция обрезает имя файла до точки?


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.