我有一个包含大量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();
?>
答案 0 :(得分:1)
您的PDF数据存储在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,因此无效。
您应该使用ZIP文件名定义$ zipfilename,并在创建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);
答案 1 :(得分:0)