我的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