Скачать файл на сервере

Скачать указанный файл, можно передав следующие заголовки:

// Пусть к файлу
$file_path = 'image.jpg';

// узнать MIME файла
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $file_path);

// Отправка заголовков для скачиваний файла
header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
header('Content-Type: '.$mime);
header('Content-Length: '.filesize($file_path));
header('Connection: close');

echo file_get_contents($file_path);

Заголовок Content-Disposition: attachment отвечает за скачивание файла. В поле filename указывается имя файла, под которым браузер предложит сохранить файл.

В параметре Content-Type рекомендуется указывать реальный MIME-файла, т.к. браузеры могут подставить нужные программы для сохранения файла. В данном параметре также часто указывают «application/octet-stream», который означает, что формат файла не указан.

Также есть параметр Content-Type: application/force-download, но его не рекомндуется использовать, т.к. данный MIME не является стандартном, и некоторые браузеры могут его не обработать.

Скачиваемый файл будет содержать содержимое текущей страницы, поэтому в конце кода выводится исходный код картинки через функцию file_get_contents().