Как подсказывает @Sarfraz, после выполнения задач, которые вам нужно выполнить, вы можете отправить заголовок Content-Type
в браузер, а затем вывести содержимое файла в браузер. После этого браузер будет работать в соответствии с пользовательскими настройками, которые обычно будут либо: а) открывать и отображать файл, либо б) сохранять файл на диск.
Если вы хотите принудительно сохранить файл на диске, а не отображать его в браузере, обычно используется способ указания типа mime Content-Type: application/octet-stream
. Также можно указать имя файла вложения с заголовком Content-Disposition: attachment; filename=foobar.baz
.