Вот простой скрипт, который отлично работает для меня:
<?php
$db = new PDO("mysql:host=localhost;dbname=test", "test","");
// Read the file and store as blob into DB
$filename = 'doc.pdf';
$fileContents = file_get_contents($filename);
$stmt = $db->prepare("insert into pdf_blob(filename, data) values (?, ?)");
$stmt->execute([$filename, $fileContents]);
// Read blob data from DB and output in browser
$stmt = $db->prepare("select filename, data from pdf_blob where filename = ? limit 1");
$stmt->execute([$filename]);
$result = $stmt->fetch();
header('Content-Type: application/pdf') ;
header('Content-Disposition: inline; filename="test.pdf"') ;
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
echo $result['data'];
Я читаю PDF-файл из файловой системы с помощью file_get_contents () и сохраняю содержимое в MySQL BLOBколонка.После этого я читаю те же данные из БД и просто использую echo
для вывода.Объявление заголовка точно такое же, как и в вашем коде.
Хотя я использую здесь PDO вместо mysqli , это, вероятно, не должно иметь значения.
Вот мое определение таблицы:
CREATE TABLE `pdf_blob` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`filename` VARCHAR(50) NOT NULL,
`data` BLOB NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;