私の PHP/MySQL Web アプリケーションには、ImageMagick を使用して各ユーザーの一連の画像を 1 つの 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);