Zip несколько баз данных PDF-файлы blob

У меня есть таблица базы данных, содержащая многочисленные PDF-файлы blob. Я пытаюсь объединить все файлы в один ZIP-файл, который можно загрузить, а затем распечатать.

Пожалуйста помоги!

<?php include '../config.php'; include '../connect.php'; $session = $_GET['session']; $query = "SELECT $tbl_uploads.username, $tbl_uploads.description, $tbl_uploads.type, $tbl_uploads.size, $tbl_uploads.content, $tbl_members.session FROM $tbl_uploads LEFT JOIN $tbl_members ON $tbl_uploads.username = $tbl_members.username WHERE $tbl_members.session = '$session'"; $result = mysql_query($query) or die('Error, query failed'); $files = array(); while(list($username, $description, $type, $size, $content) = mysql_fetch_array($result)) { $files[] = "$username-$description.pdf"; } $zip = new ZipArchive; $zip->open('file.zip', ZipArchive::CREATE); foreach ($files as $file) { $zip->addFile($file); } $zip->close(); header('Content-Type: application/zip'); header('Content-disposition: attachment; filename=filename.zip'); header('Content-Length: ' . filesize($zipfilename)); readfile($zipname); exit(); ?> 

Ваши данные PDF хранятся в базе данных в BLOB-полях, я не вижу, как вы помещаете эти данные в файл. Таким образом, ваш ZIP не будет содержать никаких файлов, потому что вы не добавляете к нему реальные существующие файлы.

Это то, что вы сейчас делаете:

  • Чтение данных из базы данных
  • Создание массива имен файлов
  • Создание ZIP-файлов, которые могут не существовать

Это то, что вы должны сделать:

  • Чтение данных из базы данных
  • Создание массива имен файлов
  • Напишите данные BLOB в эти файлы
  • Создание ZIP-файлов, которые существуют

Пример:

  $files = array(); while(list($username, $description, $type, $size, $content) = mysql_fetch_array($result)) { $files[] = "$username-$description.pdf"; // write the BLOB Content to the file if ( file_put_contents("$username-$description.pdf", $content) === FALSE ) { echo "Could not write PDF File"; } } 

Что вы должны делать, если это сработает для вас:

Запишите файлы во временную папку (возможно, с помощью http://php.net/tempnam ) в другом месте и, возможно, удалите их после процесса архивирования.

В вашем коде также есть вторая проблема: вы используете $ zipfilename для вычисления длины содержимого и $ zipname для чтения файла и без переменной для создания zip. Поскольку $ zipfilename и $ zipname не определены, это не сработает.

Вы должны определить $ zipfilename с именем ZIP-файла, а также использовать эту же переменную при создании zip-файла.

Пример:

  // a temp filename containing the current unix timestamp $zipfilename = 'temp_' . time() . '.zip'; $zip->open($zipfilename, ZipArchive::CREATE); foreach ($files as $file) { $zip->addFile($file); } $zip->close(); header('Content-Type: application/zip'); header('Content-disposition: attachment; filename=filename.zip'); header('Content-Length: ' . filesize($zipfilename)); readfile($zipfilename); 

pdftk объединит несколько файлов PDF, а также PDFsam ..