Принудительное скачивание файла

У меня есть php-страница с информацией и ссылки на файлы, такие как pdf файлы. Типы файлов могут быть любыми, поскольку они могут быть загружены пользователем.

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

Все ссылки на другие страницы выполняются через Javascript, а фактическая ссылка - на #, поэтому, возможно, это будет нормально?

Должен ли я просто установить

header('Content-Disposition: attachment;)

для всей страницы?

Ответ 1

Вам нужно отправить эти два поля заголовка для конкретных ресурсов:

Content-Type: application/octet-stream
Content-Disposition: attachment

Content-Disposition может дополнительно иметь параметр filename.

Вы можете сделать это либо с помощью PHP script, который отправляет файлы:

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment');
readfile($fileToSend);
exit;

И имена файлов передаются на этот script через URL. Или вы используете некоторые функции веб-сервера, такие как mod_rewrite, чтобы заставить тип:

RewriteEngine on
RewriteRule ^download/ - [L,T=application/octet-stream]

Ответ 2

Немного другой стиль и готов к работе:)

$file = 'folder/' . $name;

if (! file) {
    die('file not found'); //Or do something 
} else {
    // Set headers
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=$file");
    header("Content-Type: application/zip");
    header("Content-Transfer-Encoding: binary");
    // Read the file from disk
    readfile($file); 
}