我的PHP/MySQL Web应用程序有一个功能,可以将每个用户的一组图像组合成一个使用ImageMagick的PDF。每个PDF然后被放置到一个ZIP文件。每张图片的尺寸最大可达5 MB。我的问题是浏览器在用户下载文档之前超时。如何使用PHP和ZipArchive创建ZIP文件而不发送给浏览器?
关于如何最好地做到这一点的任何想法?
我在想我可以在不发送给浏览器的情况下创建ZIP文件(即在我的代码末尾删除“标题”),然后通过电子邮件发送链接到文件;然而,它仍然要求用户等待很长时间才能创建ZIP文件(它看起来好像浏览器只是悬挂着)。这可以通过AJAX在幕后完成,或者直接在服务器上完成?
$tmp_path = sys_get_temp_dir().'/';
$archive_name = "myarchive.zip";
$zip = new ZipArchive();
if($zip->open($archive_name,1 ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
return false;
}
foreach ($rows AS $row) {
$irows = get_images($row['user_id']);
$images = array();
foreach($irows AS $irow){
$doc = fetch_document_path($irow['id']);
$output_file_name = $tmp_path.$irow['id'].'.jpg';
exec ('convert '.$doc.' '.$output_file_name);
$images[] = $irow['id'].'.jpg';
}
$images = implode(' ', $images);
$output_file_name = $tmp_path.$row['name'].'.pdf';
exec ('convert '.$images.' "'.$output_file_name.'"');
$zip->addFile($output_file_name,basename($output_file_name));
}
$zip->close();
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="output.zip"');
readfile($archive_name);
浏览器正在超时或PHP?无论如何,它绝对看起来像你应该考虑创建一些将做到这一点的后台工作。 – lupatus