Чтобы в браузере открылся диалог "Сохранить файл" с названием файла file.dat, скрипт должен послать такие заголовки:
header("Content-Disposition: attachment; filename=file.dat");
header("Content-Type: application/x-force-download; name=\\"file.dat\\"");
Не мешало бы также ссылаться на скрипт как
http://.../download.php/file.dat (такие URL позволяет веб-сервер Apache, IIS нужно специально настраивать), иначе браузеры, основанные на Mozilla, могут попытаться записать файл как file.dat.php.
Примечание: Не используйте заголовок header("Cache-Control: no-cache") в таких скриптах, большинство версий Internet Explorer не смогут скачать файл.
(c) Владимир Палант