можно проше сделать. создать 2 поля для имени в базе.
`name` varchar(30) NOT NULL,
`namex` varchar(255) NOT NULL,
при выгрузке на сервер файла тупо пишем в namex реальное имя файла, далее мутим такую фичу. узнаем формат файла и далее пишем к примеру свой адрес сайта папример johncms_com_ и к нему приписываем id самого файла, далее пририсовываем формат и сохраняем его на сервере. пример имени johncms_com_1.zip. тепер на сервере храниться одно имя а выводим другое. ну конечно незабудь про проверку расщирения для этого занеси все разрешение расщирения в масив и проаеряй их через функцию in_array вроде идеальный вариант