Загрузите PDF-файл, используя PHP с формой поиска

0

Я создал форму поиска, в которой пользователь вводит код изображения, и при поиске он позволит пользователю загрузить файл. Ниже мой код

<html>
          <head>
            <title>Search  Contacts</title>
          </head>
          <body>

            <h3>Search Client File</h3>
            <form  method="post" action="#"  id="searchform">
              Type the File Code:<br><br>
                  <input  type="text" name="fcode">
            <br>
      <input  type="submit" name="submit" value="Search">
            </form>

<?php
$filecode=$_POST["fcode"];
     if (!empty($filecode))
     {
$file="/var/www/website/$filecode.pdf";
header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
     }
     else
     {
       echo "No Results";
     }

        ?>
    </body>
    </html>

Проблема в том, что загруженный файл не может быть просмотрен или невозможен, что, по-видимому, является проблемой с моим кодом?

  • 0
    Разметка в верхней части файла также отображается на выходе? Если это так, ни один читатель PDF не поймет этого. Обычно ответ с файлом происходит в сценарии PHP сам по себе, без дополнительной разметки.
  • 0
    @ Давид Извините, но что вы подразумеваете под "разметкой"
Показать ещё 3 комментария
Теги:
pdf
download

3 ответа

0

Ваш код никогда не будет работать. Вы выводите свою HTML-форму в начале каждого исполнения кода. Если загрузка была запрошена, загрузка будет добавлена к этой странице HTML. И вызовы header() также не будут выполнены с "уже отправленными заголовками".

Если вы отправляете свою форму на ту же страницу, у вас должен быть код загрузки FIRST:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   ... download stuff here
   exit(); // critical - don't let the html get output
}

... html form here ...
0

Я сделал это для работы, ниже приведен код для справки.

header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    ob_end_flush();
    readfile($file);
0

Попробуйте изменить этот заголовок:

header('Content-Type: application/pdf');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню