Вопрос по php, http-headers, download, html – Использование PHP, чтобы заставить скачать PDF

9

Я пытаюсь заставить веб-сайт иметь кнопку, которая вызывает загрузку PDF.

Вот HTML-код кнопки:

<code>    <a href=scripts/download.php>
    <input type="image" src="images/download.gif" alt="Submit button"/>
    </a>
</code>

И скрипт php:

<code>    <?php
    header('Content-Type: application/pdf');
    header('Content-disposition: attachment;filename=documents/ECM_IT_ResumeDownload.pdf');
    readfile('documents/ECM_IT_ResumeDownload.pdf');
    ?>
</code>

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

& quot; Adobe Reader не смог открыть & Documents_ECM_IT_ResumeDownload.pdf & apos; потому что это либо не поддерживаемый тип файла, либо файл поврежден (например, он был отправлен как вложение электронной почты и неправильно декодирован). & quot;

Любая помощь будет принята с благодарностью.

EDIT Открыл PDF в текстовом редакторе и получил это сообщение:

& Quot;
Warning: readfile (documents / ECM_IT_ResumeDownload.pdf) [function.readfile]: не удалось открыть поток: нет такого файла или каталога вhtml/scripts/download.php онлайн4
& Quot;

Документ определенно там, хотя. в html / documents / ECM_IT_ResumeDownload.pdf

Вы пытались сравнить исходные и загруженные файлы? zerkms
Ааа, я не заметил этого, я сделал это для другой ссылки, но не заметил, что у меня все еще есть это Craig Traynor
Обертывание входного тега в тег ссылки нечетно Ben
Убедитесь, что после @ нет пробел?>, который стал частью загрузки. На самом деле, устранить?> полностью, так что это не проблема. Marc B
Скорее всего, что-то приводит к тому, что вывод включает в себя недопустимое содержимое PDF. Возможно, сервер выдает ошибку. Попробуйте открыть файл результатов в текстовом редактор Ben

Ваш Ответ

5   ответов
2

) В конце? Он будет обрабатывать страницу как чистую страницу PHP, удаляя любые возможные новые строки, которые могут случайно добавляться в конец вывода. Это помогло мне, когда я динамически создавал файлы Excel для загрузки, и они загружались как поврежденные. Проверьте эту страницу для получения дополнительной информации:

http: //www.php.net/manual/en/language.basic-syntax.phptags.ph

Из вашего отредактированного вопроса кажется, что PHP не может найти файл. Попробуйте использовать абсолютный путь к файлу, например: «c: \ blah \ de \ blah \ bloo.pdf» или «c: /blah/de/blah/bloo.pdf». Если один из этих путей работает и загружается правильно, ваш относительный путь каким-то образом неверен.

Это то, чего я не знал, я думал, что ты всегда должен был их закрывать, но, к сожалению, это не решает проблему Craig Traynor
Попробуйте ввести абсолютный путь в вызове readfile (): «c: /html/downloads/ECM_IT_ResumeDownload.pdf» или что-то еще. abelito
Hoora! Нет проблем, удачной ночи abelito
Это помогло, спасибо Craig Traynor
4

ом:

header('Content-Type: application/pdf');
header('Content-disposition: attachment; filename=ECM_IT_ResumeDownload.pdf');
Все еще получил ту же ошибку. Craig Traynor
23
$file_url = www.example.com/pdffolder/$pdfname;
header('Content-Type: application/pdf');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=".$pdfname);
readfile($file_url);
0

у него также есть защита от хотлинков:http: //by.gowondesigns.com/getfile

0

Ваш скрипт загрузки находится наscripts/download.php и файл, который вы хотите загрузить, находится наdocuments/[...].pdf.

Поэтому твойreadfile()ункция @ должна проходить в родительский каталог (за пределамиscripts/), напримерreadfile('../documents/[...].pdf');.

Похожие вопросы