我的 PHP/MySQL Web 应用程序具有使用 ImageMagick 将每个用户的一组图像组合成单个 PDF 的功能。然后将每个 PDF 放入一个 ZIP 文件中。每个图像的大小最大为 5 MB。我的问题是浏览器在用户下载文档之前超时。
关于如何最好地做到这一点的任何想法?
我在想我可以创建 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);