Принудительно загрузить файл в php - PullRequest
2 голосов
/ 15 сентября 2010

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

Ответы [ 5 ]

6 голосов
/ 15 сентября 2010
<?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

5 голосов
/ 15 сентября 2010

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

header("Content-Disposition: attachment");

Справочник по PHP предоставляет отличный пример для этого.

2 голосов
/ 15 сентября 2010

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

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

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

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

0 голосов
/ 25 августа 2011

исходный код взят из 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 M Y H: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).'";');

и обратите внимание, что final ; внутри строки, без него не будет работать

0 голосов
/ 15 сентября 2010
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n");
header("Last-Modified: " . gmdate("D, d M Y H: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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...