Как загрузить pdf-файл, сохраненный в базе данных mysql, как данные MEDIUMBLOB с использованием php?

Я сохранил файл pdf в базе данных mysql как файл MEDIUMBLOB. Я использовал следующий код для его загрузки. Файл, который загружается, имеет тот же размер и тип файла, что и исходный файл, но он не открывается должным образом. Что может быть проблемой и как ее исправить?

$emp_no=55; $DOB="2014-09-03"; $query="SELECT file_name, file_type, file_size, file_data FROM document WHERE emp_no=$emp_no AND DOB='$DOB'"; $retval=mysqli_query($non,$query); $row=mysqli_fetch_array($retval,MYSQL_ASSOC); $file_name=$row['file_name']; $file_type=$row['file_type']; $file_size=$row['file_size']; $file_data=$row['file_data']; header("Content-length: $file_size"); header("Content-type: application/pdf"); header("Content-Disposition: attachment; filename=$file_name"); echo $file_data; 

Откройте файл download.pdf в Блокноте, вы увидите, что в верхней части файла есть сообщения об ошибках PHP, это повредит любой загруженный файл.

Некоторые решения:

  • Исправить их 😉
  • Отключение отчетов об ошибках E_NOTICE через error_reporting(E_ERROR); в первой строке вашего PHP-кода
  • Создайте собственную механику сообщений об ошибках и отключите печать ошибок в браузере через ini_set('display_errors', 0); поэтому они не могут взаимодействовать с загруженными файлами

Вы можете либо исправить это, либо добавить

Вот мое окончательное рабочее решение:

 <?php header ('Content-type: text/html; charset=UTF-8'); //Get id from form (POST) $order = $_POST['Order']; //Set connection $servername = "mysql.yourserver.com"; $username = "yourusername"; $password = "yourpassword"; $dbname = "yourdatabasename"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Error: " . $conn->connect_error); } //Retrieve data from db $result = $conn->query('SELECT * FROM Table WHERE id='.$order); //Set rows to variables while($row = $result->fetch_assoc()) { $size = $row["size"]; $type = $row["type"]; $filename = $row["filename"]; $content = $row["content"]; } //Get file header("Content-disposition: attachment; filename=$filename"); header("Content-length: $size"); header("Content-type: $type"); echo $content; //End connection $conn->close(); ?>