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