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

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

Первый вариант с явным указанием типа файла 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)); можно не указывать.

Перед отправкой файла нужно убедится что буферизация вывода отключена с помощью 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, обновлено 30.09.2019
13038

Комментарии

, чтобы добавить комментарий.

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

Отправка письма с вложением
Отправка e-mail в кодировке UTF-8 с вложенными файлами и возможные проблемы.
6555
0
Примеры использования cURL в PHP
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
115599
+16
Преобразование CSV в XLSX на PHP
В статье приведены два примера конвертации фалов csv в xlsx, алгоритм следующий...
5547
+2
Работа с FTP в PHP
Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.
6456
+1
Бот Телеграм на PHP
Примеры как зарегистрировать бота в Телеграм, описание и взаимодействие с основными методами API.
79163
+34
Использование API Яндекс Диска на PHP
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
37941
+13