Вариант 1: при отдаче файла выдавать заголовок
Content-Disposition:attachment; filename=имя_вашего_файла
Вариант 2: генерируйте файл динамически, сохраняйте на сервере, делайте на него редирект. Если место экономите - можете удалять перед этим файл, который был сгенерирован в прошлый раз.
Вариант 3: если вариант с отдачей файла по прямой ссылке как в варианте 2 не устраивает, можно сделать немного по-другому. Вы сначала генрируете ссылку, в конце у которой будет рандомное имя, например:
path/to/script.php/random_file_name.txt
В конфиге сервера с помощью Rewrite убираете последний сегмент. Ну Браузер предложит сохранить файл именно с тем именем, которое идет в урле после последнего слэша.