Иногда при запросе некоторого файла в браузере необходимо передать его таким образом, чтобы пользователю было предложено сохранить этот файл на диск. В типовых случаях открывая, к примеру, PDF-файл по прямой ссылке, браузер пытается открыть его в своем окне, но как сделать так, чтобы можно было предложено сохранить этот файл на вашем компьютере?
Знаете ли вы или нет, но всё дело в заголовках ответа веб-сервера, которые посылаются браузеру в виде ответа на ваш запрос. Посылая нужные заголовки браузеру, можно инициировать появление окна с предложением для непосредственного скачивания файла. Рассмотрим пример. В примере, API битрикса главным образом используется для получения пути к файлу. Это говорит о том, что зная путь к файлу, можно сделать отправку его и без использования API битрикса.
<?
// подключаем API Bitrix
require_once($_SERVER['DOCUMENT_ROOT'] .
"/bitrix/modules/main/include/prolog_before.php");
// ID файла
$fileID = 123;
// получаем массив полей файла
$dwFile = CFile::GetFileArray($fileID);
if ($dwFile){
// путь до файла
$file = $_SERVER['DOCUMENT_ROOT'].$dwFile['SRC'];
// отправка
header('Content-Description: File Transfer');
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$dwFile['FILE_NAME'].'"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '.filesize($file));
readfile($file);
} else echo 'Не удалось получить файл!';
?>