Один из вариантов - использовать базу данных для хранения оригинальных имен вместе с уникальным идентификатором.
Затем вы можете сохранить файл под любым уникальным именем.
- Используйте только идентификатор ... file = 1
- Используйте идентификатор и добавочный номер = 1.mp3
- Используйте комбинацию идентификатора и имени = 1_name_of_file.mp3
- Или любой другой уникальный параметр именования.
Затем вы используете php для обслуживания файлов. Установка заголовка с оригинальным именем файла.
Пользователи не будут знать, как вы храните файл. Несколько файлов с одним и тем же именем могут быть загружены и загружены с этим именем, но могут храниться на сервере однозначно.
<?php
$actualFile = './uploads/'.$id;
// Can use some smarts to determine the mime type here
header('Content-type: application/force-download');
// The user will be prompted to save it as the filename given here.
header('Content-Disposition: attachment; filename="'.$originalName.'"');
header("Content-Length: ".filesize($actualFile));
// The actual file on the server
readfile($actualFile);
?>
Существует также ряд других параметров заголовка, которые можно установить для кэширования и т. Д.
http://php.net/manual/en/function.header.php
Fileinfo - хорошее расширение для определения mimetypes
http://www.php.net/manual/en/function.finfo-file.php