Как я могу заставить диалоговое окно Сохранить как, не покидая страницу в php? - PullRequest
0 голосов
/ 09 июля 2010

У меня есть тег привязки:

<a href="file.pdf">Download Me</a>

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

Я нашел это (http://www.w3schools.com/php/func_http_header.asp):

header("Content-type:application/pdf");

// It will be called downloaded.pdf
header("Content-Disposition:attachment;filename='downloaded.pdf'");

// The PDF source is in file.pdf
readfile("file.pdf");

Я не понимаю, где разместить эти заголовки. В верхней части страницы? Когда я пытаюсь разместить эти 3 строки прямо над моей ссылкой, я получаюследующие ошибки:

Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с /home5/ideapale/public_html/amatorders_basic/admin/download.php:38) в / home5 / ideapale /public_html / amatorders_basic / admin / download.php в строке 118

Я получил одинаковую ошибку для обеих только что добавленных строк заголовка. Сразу после этого есть тысячи строк букв ASCII. Как можноЯ получаю диалоговое окно «Сохранить как», которое отображается с использованием jQuery или PHP (что проще)?

Ответы [ 3 ]

4 голосов
/ 09 июля 2010

Пожалуйста, будьте осторожны при использовании кода Stijn Van Bael, он открывает вам некоторые серьезные уязвимости.

Попробуйте что-то вроде:

--- download.php ---
$allowed_files = array('file.pdf', 'otherfile.pdf');

if (isset($_REQUEST['file']) && in_array($_REQUEST['file'], $allowed_files))
{
  $filename = $_REQUEST['file'];

  header("Content-type:application/pdf");
  header("Content-Disposition:attachment;filename='$filename'");

  // The PDF source is in file.pdf
  readfile($filename);

  exit();
}
else
{
  // error
}


--- linkpage.php ---
<a href="download.php?file=file.pdf">Download PDF</a>
<a href="download.php?file=otherfile.pdf">Download PDF</a>

Вероятно, лучший способ сделать это - на уровне веб-сервера (это можно сделать в .htaccess). Это заставит все PDF-файлы обрабатываться как двоичный файл (вынуждая их загружать браузер) в каталоге под вами и ниже. вставь это.

<FilesMatch "\.(?i:pdf)$">
 Header set Content-Disposition attachment
 ForceType application/octet-stream
</FilesMatch>
0 голосов
/ 21 августа 2013

Или вы можете просто использовать новое свойство HTML5 download в теге привязки вашего HTML.

Код будет выглядеть примерно так:

<a download href="path/to/the/download/file"> Clicking on this link will force download the file</a>
0 голосов
/ 09 июля 2010

Создайте новую страницу с заголовками и файлом чтения, затем сделайте ссылку на скачивание ссылкой на страницу, которая вернет файл PDF.

Например:

<a href="download.php?file=file.pdf">Download Me</a>

Источник для скачивания.php:

$filename = $_REQUEST['file'];
header("Content-type:application/pdf");
// It will be called downloaded.pdf
header("Content-Disposition:attachment;filename='$filename'");

// The PDF source is in file.pdf
readfile($filename);
...