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

require_once("database.php");

if(isset($_GET['upload_id']) && is_numeric($_GET['upload_id']))
{
    $fileFolder='uploads/';

    $sql = "SELECT file FROM documents WHERE upload_id = :id"; 
    $result = $pdo->prepare($sql);
    $result->bindParam(":id", $_GET['upload_id']);
    $result->execute();                 

    $resArray = $result->fetchAll();

    $file = $resArray['file'];

    header('Pragma: public');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Content-Type: application/pdf');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: '.filesize($fileFolder.$file));
    @read($fileFolder.$file);

}

Когда я нажимаю на кнопку и пытаюсь открыть PDF-файл, я получил это сообщение в Chrome

Не удалось загрузить документ PDF ПЕРЕЗАГРУЗИТЬ

2
S.I. 6 Май 2016 в 10:31

2 ответа

Лучший ответ

Вы можете получить имя своего файла, используя fetch(PDO::FETCH_ASSOC);, который возвращает следующую строку как массив, проиндексированный column name

$sql = "SELECT file FROM documents WHERE upload_id = :id"; 
$result = $pdo->prepare($sql);
$result->bindParam(":id", $_GET['upload_id']);
$result->execute();     
$resArray = $result->fetch(PDO::FETCH_ASSOC);
$file = $resArray['file'];// get your file name

Используя fetchAll

Пройти PDO::FETCH_COLUMN, 0

 $result = $sth->fetchAll(PDO::FETCH_COLUMN, 0);
 $file = $resArray[0];// get your file name
1
Saty 6 Май 2016 в 07:47

Попробуйте следующее:

require_once("database.php");

if(isset($_GET['upload_id']) && is_numeric($_GET['upload_id']))
{
    $fileFolder='uploads/';

    $sql = "SELECT file FROM documents WHERE upload_id = :id"; 
    $result = $pdo->prepare($sql);
    $result->bindParam(":id", $_GET['upload_id']);
    $result->execute();                 

    $resArray = $result->fetchAll();

    $file = $resArray['file'];

    $myFilePath = $fileFolder . $file;

    if (file_exists($myFilePath)) {

        // the file exists, so open it
        header('Pragma: public');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Content-Type: application/pdf');
        header('Content-Transfer-Encoding: binary');
        header('Content-Length: '.filesize($fileFolder.$file));
        @read($fileFolder.$file);

    } else {

        // the file doesn´t exits
        // handle the error if neccessary
        echo "the file doesn´t exist";

    }

}
1
Michael 6 Май 2016 в 07:59