Как автоматически запустить загрузку на PHP?


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

Я конкретно имею в виду функциональность, аналогичную функциональности сайтов загрузки, которые предлагают пользователю сохранить файл на диск, как только вы нажмете на название программного обеспечения?

Author: Community, 2008-09-03

4 answers

Перед выводом файла отправьте следующие заголовки:

header("Content-Disposition: attachment; filename=\"" . basename($File) . "\"");
header("Content-Type: application/force-download");
header("Content-Length: " . filesize($File));
header("Connection: close");

@ grom: Интересно узнать о типе MIME "приложение/октетный поток". Я не знал об этом, всегда просто использовал "приложение/принудительная загрузка":)

 54
Author: Robert Swisher, 2017-05-23 12:18:07

Вот пример отправки PDF-файла обратно.

header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Content-Transfer-Encoding: binary');
readfile($filename);

@ Swish Я не нашел тип контента приложения/принудительной загрузки, чтобы сделать что-то другое (проверено в IE и Firefox). Есть ли причина не отправлять обратно фактический тип MIME?

Также в руководстве по PHP Хейли Уотсон опубликовано:

Если вы хотите принудительно загрузить и сохранить файл вместо его визуализации, помните, что не существует такого типа MIME, как "приложение/принудительная загрузка". Правильный тип для использования в этой ситуации - "приложение/октетный поток", а использование чего-либо другого просто основывается на том факте, что клиенты должны игнорировать нераспознанные типы MIME и вместо этого использовать "приложение/октетный поток" (ссылка: Разделы 4.1.4 и 4.5.1 RFC 2046).

Также согласно IANA не существует зарегистрированного типа приложения/принудительной загрузки.

 38
Author: grom, 2017-05-23 12:02:23

Чистый пример.

<?php
    header('Content-Type: application/download');
    header('Content-Disposition: attachment; filename="example.txt"');
    header("Content-Length: " . filesize("example.txt"));

    $fp = fopen("example.txt", "r");
    fpassthru($fp);
    fclose($fp);
?>
 9
Author: vdbuilder, 2011-12-01 22:45:05

Мой код работает для расширений txt, doc, docx, pdf, ppt,pptx, jpg, png, zip, и я думаю, что лучше явно использовать фактические типы MIME.

$file_name = "a.txt";

// extracting the extension:
$ext = substr($file_name, strpos($file_name,'.')+1);

header('Content-disposition: attachment; filename='.$file_name);

if(strtolower($ext) == "txt")
{
    header('Content-type: text/plain'); // works for txt only
}
else
{
    header('Content-type: application/'.$ext); // works for all extensions except txt
}
readfile($decrypted_file_path);
 0
Author: Omidoo, 2012-04-04 15:17:16