Отдача файлов на скачивание PHP

В PHP отправка файла в браузер на скачивание осуществляется в 2 этапа:

1

Отправка заголовков

Первый вариант с явным указанием типа файла (mime):

$file = __DIR__ . '/file.avi';

header('Content-Description: File Transfer');
header('Content-Type: video/x-msvideo');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
PHP

Второй – application/octet-stream «двоичный файл без указания формата».

$file = __DIR__ . '/file.avi';

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
PHP

Заголовок с размером файла – header('Content-Length: ' . filesize($file)); можно не указывать.

2

Чтение и вывод файла

Перед отправкой файла нужно убедится что буферизация вывода отключена с помощью ob_get_level() или сбросить и отключить ее функцией ob_end_clean().

Непосредственно чтение и вывод в буфер можно сделать следующими функциями:

readfile

readfile($file);
exit();
PHP

fread

if ($handle = fopen($file, 'rb')) {
	while (!feof($handle)) {
		echo fread($handle, 1024);
	}
	fclose($handle);
}
exit();
PHP

file_get_contents

echo file_get_contents($file);
exit();
PHP

Полный пример

ob_end_clean();

$file = __DIR__ . '/file.avi';

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));

readfile($file);
exit();
PHP
06.08.2019 78

Поделится

Темы

Files HTTP PHP

Другие публикации

Пример создания файла карты сайта (sitemap.xml) на PHP. Интеграция его на сайт и подключение его в robots.txt
parse_url($url, $component) – стандартная функция, разбирает URL-адрес на компоненты в виде массива.
Сборник регулярных выражений с примерами на PHP для проверки данных из полей форм.
Представленные способы помогут сделать алфавитный список (указатель) разбитый на колонки, для вывода например станций...
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...