我有一个包含大量 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,这将不起作用。
您应该使用 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);
关于php - 压缩多个数据库 PDF blob 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3024765/