Если попытаться переименовать файл-источник, может получится, что некоторые пользователи получат не то что хотели.
Лучше отсылать файл прямо из скрипта. Насколько я понимаю, имя файла, который получит клиент, задается в заголовке потока, то есть имя можно указать, какое заблогарассудится.
 header ("Content-Disposition: attachment; filename=\'fname.ext\');
За дополнительной информацией можете обращайтиться сюда: 
http://rfc.net/rfc2616.html (HTTP Protocol)