Открыть PDF-файлы в новой вкладке - PullRequest
0 голосов
/ 01 ноября 2018

Доброе утро всем. Я пытаюсь открыть PDF-файл в новой вкладке. Я успешно загрузил PDF-файл в нужную папку, и название PDF-файла находится в базе данных этого конкретного продукта. из «списка продуктов» я использую кнопку и открываю модальное окно, где есть вариант, какой pdf относится к этому продукту (в настоящее время нам нужно загрузить 2, но в будущем, возможно, больше) нам нужно открыть.

Вот как я называю модал:

<a href="#docs<?php echo $row['prod_id'];?>" data-target="#docs<?php echo $row['prod_id'];?>" data-toggle="modal" style="color:#fff;" class="small-box-footer"><i class="glyphicon glyphicon-duplicate text-blue"></i></a>

и это модал:

<div id="docs<?php echo $row['prod_id'];?>" class="modal fade in" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" style="display: none;">
<div class="modal-dialog">
  <div class="modal-content" style="height:auto">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
              <span aria-hidden="true">×</span></button>
            <h4 class="modal-title">Supporting Documents of <?php echo $row['prod_name'];?></h4>
          </div>
          <div class="modal-body">
             <div class="form-group">
               <label class="control-label col-lg-6" for="price">Technical Datasheet</label>

               <a href="view_docs.php" data-target="view_docs.php" src="../dist/docs/<?php echo $row['prod_tds'];?>"target="_blank">View TDS</a>

              <div class="col-lg-9">

                </div>  
             </div>

            <div class="form-group">
                <label class="control-label col-lg-6" for="price">Material Safety Datasheet</label>
                <a href="view_docs.php" data-target="view_docs.php" src="../dist/docs/<?php echo $row['prod_msds'];?>"target="_blank">View MSDS</a>
                <div class="col-lg-9">

                </div>
            </div> 
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
          </div>
          </form>
        </div>

    </div>

Во время чтения я должен вызвать новый php с некоторыми заголовками, которые я не знаю, как с ними работать, и получаю сообщение об ошибке «Не удалось загрузить pdf документ».

Это код на view_docs.php:

    <?php session_start();
if(empty($_SESSION['id'])):
header('Location:../index.php');
endif;

include('../dist/includes/dbcon.php');
$file = 'view'; 




$filename = '$file'; /* Note: Always use .pdf at the end. */

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="filename.pdf"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');


@readfile($file);

?>

Что я не понял правильно? Я считаю, что что-то не так в view_docs.php, но я не знаю, как заставить это работать ...

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Я думаю, что вам не хватает нескольких вещей (например, расширение файла):

//no extension
$file = 'view';  

//this is literally $file and never used again
$filename = '$file'; 

header('Content-type: application/pdf');
//the name of the transfered file is filename.php (not really an issue in this case)
//but is that what you wanted there
header('Content-Disposition: inline; filename="filename.pdf"');
header('Content-Transfer-Encoding: binary');
//still no extension on 'view' so your file is just named view (nothing else)
//no file path either.
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');
//and you guessed it still no extension (error suppression hides the file not found error)
@readfile($file);

$filename - это $file буквально не значение переменной из-за использования одинарных кавычек. PHP не выполняет переменную интерполяцию (замену значений) для строк в одинарных кавычках. Не то чтобы это имело значение, потому что оно никогда не использовалось снова.

Вероятно, @ не должно быть там, иначе вы не смогли бы найти файл с именем view без расширения. Вы должны увидеть что-то вроде этого

Предупреждение: filesize (): сбой статистики для просмотра в C: \ Unit \ eval \ 1541064182.php в строке 2

Предупреждение: файл чтения (просмотр): не удалось открыть поток: нет такого файла или каталога в C: \ Unit \ eval \ 1541064182.php в строке 3

За исключением того, что у вас будет ваш путь, а не мой путь к моему серверу модульного тестирования.

Другими словами, ваш вызов readfile буквально такой:

 @readfile('view');

Вы можете оставить имя загрузки как filename.php, но я не думаю, что это является намерением.

$file = 'view.pdf'; 

$pathname = $path.$file;

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="'.$file.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($pathname));
header('Accept-Ranges: bytes');

readfile($pathname);

Очевидно, вам придется ввести значение для пути, или, если оно находится в той же папке, вы можете проигнорировать это.

Да, и последнее, что нужно избавиться от этой вещи ?>, потому что если после этого у вас будет строка возврата, это может повредить ваш файл. Я забыл, если это (в частности, просто возврат строки) является проблемой для PDF, но любой контент после закрывающего тега (или до) станет частью данных файла. Конечный тег не является обязательным, и поэтому стоит рисковать.

0 голосов
/ 01 ноября 2018

Вы должны вставить PDF URL в ссылку href // view_docs.pdf

<a href="view_docs.pdf" data-target="view_docs.php" src="../dist/docs/<?php echo $row['prod_tds'];?>"target="_blank">View TDS</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...