Загрузка файла силы в php

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

Solutions Collecting From Web of "Загрузка файла силы в php"

<?php // We'll be outputting a PDF header('Content-type: application/pdf'); // It will be called downloaded.pdf header('Content-Disposition: attachment; filename="downloaded.pdf"'); // The PDF source is in original.pdf readfile('original.pdf'); ?> 

http://php.net/manual/en/function.header.php

Вы можете использовать заголовок «Content-Disposition» для этого:

 header("Content-Disposition: attachment"); 

Это отличный пример для PHP .

Обычно настройка Content-Disposition для attachment перед отправкой файла заставляет загружать браузер.

Вам либо нужно настроить свой веб-сервер, чтобы предоставить этот заголовок для файлов, либо отправить их через PHP, отправив конкретный заголовок раньше, чем:

 header('Content-Disposition: attachment; filename=your_file_name.pdf'); 

Помните, что первое решение лучше, так как вы не рискуете сократить ваши загрузки, потому что время выполнения скрипта слишком велико (вы также можете его изменить).

 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n"); header("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); header("Content-type: application/pdf;\n"); $len = filesize($filename); header("Content-Length: $len;\n"); header("Content-Disposition: attachment; filename=\"downfile.pdf\";\n\n"); echo readfile($filename) 

исходный код, взятый из библиотеки TCPDF

  // download PDF as file if (ob_get_contents()) { $this->Error('Some data has already been output, can\'t send PDF file'); } header('Content-Description: File Transfer'); if (headers_sent()) { $this->Error('Some data has already been output to browser, can\'t send PDF file'); } header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 header('Pragma: public'); header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past header('Last-Modified: '.gmdate('D, d MYH:i:s').' GMT'); // force download dialog if (strpos(php_sapi_name(), 'cgi') === false) { header('Content-Type: application/force-download'); header('Content-Type: application/octet-stream', false); header('Content-Type: application/download', false); header('Content-Type: application/pdf', false); } else { header('Content-Type: application/pdf'); } // use the Content-Disposition header to supply a recommended filename header('Content-Disposition: attachment; filename="'.basename($name).'";'); header('Content-Transfer-Encoding: binary'); $this->sendOutputData($this->getBuffer(), $this->bufferlen); break; 

в любом случае наиболее важной частью является

  header('Content-Disposition: attachment; filename="'.basename($name).'";'); 

и обратите внимание, что окончательный ; внутри строки, без нее, это не сработает