Ваши данные 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);