Иногда при запросе некоторого файла в браузере необходимо передать его таким образом, чтобы пользователю было предложено сохранить этот файл на диск. В типовых случаях открывая, к примеру, 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 'Не удалось получить файл!'; ?>