У меня есть страница php с информацией и ссылки на файлы, такие как файлы PDF. Типы файлов могут быть любыми, так как они могут быть загружены пользователем.
Я хотел бы знать, как принудительно загрузить файл любого типа, не заставляя загружать ссылки на другие страницы, связанные с сайтом. Я знаю, что это возможно сделать с заголовками, но я не хочу нарушать остальную часть моего сайта.
Все ссылки на другие страницы выполняются через Javascript, а фактическая ссылка – на #, так что, возможно, это будет нормально?
Должен ли я просто установить
header('Content-Disposition: attachment;)
для всей страницы?
Вам необходимо отправить эти два поля заголовка для конкретных ресурсов:
Content-Type: application/octet-stream Content-Disposition: attachment
Content-Disposition
может дополнительно иметь параметр filename
.
Вы можете сделать это либо с помощью PHP-скрипта, который отправляет файлы:
header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment'); readfile($fileToSend); exit;
И имена файлов передаются на этот скрипт по URL-адресу. Или вы используете некоторые функции веб-сервера, такие как mod_rewrite, чтобы заставить тип:
RewriteEngine on RewriteRule ^download/ - [L,T=application/octet-stream]
Немного другой стиль и готов к работе 🙂
$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); }