P i L o T
20.12.2008 - 20:47
Всем вечер добрый. Я относительно недавно стал делать менеджер файлов для своего сайтика. Написал скрипт отправки файла на сервер, а также скрипт переименования отправляемого файла. Проблема в том, что при переименовании файла теряется его расширение.
Пытался исправить проблему следующим образом
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'у за помощь! =) Расширение теперь остается нетронутым.)
Я так понял эта функция обрезает имя файла до точки?
_____________