PHP
Загрузка файлов на сервер
Доброго времени суток. Столкнулся с проблемой при загрузки фала на сервер через форму. если загружать файл в названии которого русские буквы и пробел то при загрузки до проблема часть названия теряется и название файла начинается с пробела, и получается если до загрузки файл к примеру назывался "ответы вопросы. jpg" то после загрузки он называется " вопросы. jpeg". не могу понять в какую сторону копать.
копай в сторону техподдержки. эти косяки по их части.
Руслан Латыпов
Спасибо, пошел до них докапываться
Первое и очень важное правило - не использовать имя, которое задал файлу пользователь, иначе он может что угодно в имени написать и сломать сервер.
Я обычно генерирую имя как хэш от содержимого + расширение на основе анализа сигнатуры файла (или из белого списка, если допустимы самые разнообразные типы, а не только картинки). Это заодно решает проблему дупликации файла, если его загрузят несколько раз одинаковый.
Я обычно генерирую имя как хэш от содержимого + расширение на основе анализа сигнатуры файла (или из белого списка, если допустимы самые разнообразные типы, а не только картинки). Это заодно решает проблему дупликации файла, если его загрузят несколько раз одинаковый.
потомучто на сервер обычно русские названия символов в именах файлах загружать нельзя . на некоторых можно но для этого должен быть специальный костыль. по этому когда заливаешь файл на сервер то название изменяешь на md5 а в базу сохраняешь оригинальное имя, дату загрузки, кто загрузил, размер, тип файла, путь на сервере и т д
надо писать в названии вместо пробелов ____ ___ __
Руслан Латыпов
К сожалению это не выход. я не могу просить пользователей переименовывать файлы, это не удобно.
я все названия меняю при загрузке на сервер чтобы не возникало такой херни.. вот пример
function translit($s) {
$s = (string) $s; // преобразуем в строковое значение
$s = strip_tags($s); // убираем HTML-теги
$s = str_replace(array("\n", "\r"), " ", $s); // убираем перевод каретки
$s = preg_replace("/\s+/", ' ', $s); // удаляем повторяющие пробелы
$s = trim($s); // убираем пробелы в начале и конце строки
$s = function_exists('mb_strtolower') ? mb_strtolower($s) : strtolower($s); // переводим строку в нижний регистр (иногда надо задать локаль)
$s = strtr($s, array('а'=>'a','б'=>'b','в'=>'v','г'=>'g','д'=>'d','е'=>'e','ё'=>'e','ж'=>'j','з'=>'z','и'=>'i','й'=>'y','к'=>'k','л'=>'l','м'=>'m','н'=>'n','о'=>'o','п'=>'p','р'=>'r','с'=>'s','т'=>'t','у'=>'u','ф'=>'f','х'=>'h','ц'=>'c','ч'=>'ch','ш'=>'sh','щ'=>'shch','ы'=>'y','э'=>'e','ю'=>'yu','я'=>'ya','ъ'=>'','ь'=>''));
$s = preg_replace("/[^0-9a-z-_ ]/i", "", $s); // очищаем строку от недопустимых символов
$s = str_replace(" ", "-", $s); // заменяем пробелы знаком минус
return $s; // возвращаем результат
}
function translit($s) {
$s = (string) $s; // преобразуем в строковое значение
$s = strip_tags($s); // убираем HTML-теги
$s = str_replace(array("\n", "\r"), " ", $s); // убираем перевод каретки
$s = preg_replace("/\s+/", ' ', $s); // удаляем повторяющие пробелы
$s = trim($s); // убираем пробелы в начале и конце строки
$s = function_exists('mb_strtolower') ? mb_strtolower($s) : strtolower($s); // переводим строку в нижний регистр (иногда надо задать локаль)
$s = strtr($s, array('а'=>'a','б'=>'b','в'=>'v','г'=>'g','д'=>'d','е'=>'e','ё'=>'e','ж'=>'j','з'=>'z','и'=>'i','й'=>'y','к'=>'k','л'=>'l','м'=>'m','н'=>'n','о'=>'o','п'=>'p','р'=>'r','с'=>'s','т'=>'t','у'=>'u','ф'=>'f','х'=>'h','ц'=>'c','ч'=>'ch','ш'=>'sh','щ'=>'shch','ы'=>'y','э'=>'e','ю'=>'yu','я'=>'ya','ъ'=>'','ь'=>''));
$s = preg_replace("/[^0-9a-z-_ ]/i", "", $s); // очищаем строку от недопустимых символов
$s = str_replace(" ", "-", $s); // заменяем пробелы знаком минус
return $s; // возвращаем результат
}
Похожие вопросы
- HTTP://, создание новых файлов на сервере
- Напишите пожалуйста скрипт загрузки CSV файла в бд
- Почему для работы php используют http сервер, а веб-приложения на jave, nodeJS или Go, http сервер не требуют?
- маленький скрипт, на одном сервере работает нормально на другом не очень.
- Множественный клик по ссылке на низком интернет соединении. Реакция сервера?
- Как правильно деплоить сайт и в частности js/css файлы?
- Как следует работать с текстовыми файлами?
- Глупый вопрос: зачем нужен бинарный файл и бинарный поток?)
- Изображения на странице сжирают всю память и "кладут" сервер.
- Несколько AJAX запросов на один PHP файл.