Какой код вам нужно добавить в PHP, чтобы автоматически загрузить браузер на локальный компьютер при посещении ссылки?
Я специально думаю о функциональности, аналогичной функциональности сайтов загрузки, которые заставляют пользователя сохранять файл на диск, как только вы нажмете на имя программного обеспечения?
Перед выводом файла отправьте следующие заголовки:
header("Content-Disposition: attachment; filename=\"" . basename($File) . "\""); header("Content-Type: application/force-download"); header("Content-Length: " . filesize($File)); header("Connection: close");
@grom : Интересно о типе MIME 'application / octet-stream'. Я не знал об этом, всегда использовал «приложение / force-download» 🙂
Вот пример отправки PDF-файла.
header('Content-type: application/pdf'); header('Content-Disposition: attachment; filename="' . basename($filename) . '"'); header('Content-Transfer-Encoding: binary'); readfile($filename);
@Swish Я не нашел тип содержимого приложения / force-download, чтобы делать что-либо другое (тестировалось в IE и Firefox). Есть ли причина отказа от отправки фактического MIME-типа?
Также в руководстве по PHP Хейли Уотсон опубликовал:
Если вы хотите, чтобы файл был загружен и сохранен, вместо того, чтобы отображаться, помните, что такого типа MIME нет, как «application / force-download». Правильный тип для использования в этой ситуации – «application / octet-stream», и использование чего-либо еще просто зависит от того, что клиенты должны игнорировать непризнанные типы MIME и вместо этого использовать «приложение / октет-поток» (ссылка: разделы 4.1.4 и 4.5.1 RFC 2046).
Также в соответствии с IANA нет зарегистрированного типа приложения / принудительной загрузки.
Чистый пример.
<?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); ?>
мой код работает для 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);