phpspreadsheetで複数ファイルを同時にダウンロードしたい。
したいこと
phpspreadsheetでカテゴリー別にファイル自体を分けて出力したい。
本来はsaveの後にexitが必要なのですが、ファイルを分けて出力したいのですべてsaveの後にexitをしていますが、これだとファイルが壊れてしまいます。
saveの後にすぐexitをすると単品での出力自体は成功しますが処理が終わってしまうので今回は一番最後でないと使えません。
聞きたいこと
ファイルを分けて出力する方法をお聞きしたいです。
試したこととしてはforce_downloadを使用したのですが、これもexit同様処理が終了してしまいます。(出力は出来ました)
もう一つはフロントで回数分submitをループするというものです。
こちらは複数ファイルの処理が成功しましたが、setTimeoutで実行を遅らせてsubmitしているので、出来れば使いたくないです。
phpspreadsheetで実装したいですが、無理そうでしたらphpで使える他のライブラリでも構いません。
ご教授頂けると助かります。
コード
if($Ts_bag){
foreach($Ts_bag as $row){
$reader = new Reader();
$reader->setIncludeCharts(TRUE);
$spreadsheet = $reader->load('template.xlsx');
$spreadsheet->setActiveSheetIndex(0);
$sheet = $spreadsheet->getActiveSheet();
ob_end_clean();
$fileName = "依頼書.xlsx";
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename='.$fileName);
header('Cache-Control: max-age=0');
$writer->save('php://output');
$writer = new Xlsx($spreadsheet);
}
}
if($mag){
foreach ($mag as $row) {
$reader = new Reader();
$reader->setIncludeCharts(TRUE);
$spreadsheet = $reader->load('template.xlsx');
$spreadsheet->getProperties()->setTitle("mag");
$sheet = $spreadsheet->getActiveSheet();
ob_end_clean();
$fileName = "依頼書.xlsx";
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename='.$fileName);
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
}
}
exit;
解決しました。
どのように実装したかと言うと、ボタンを複数用意し対応するファイルをダウンロードできるように実装しました。
経緯としては、httpは1リクエスト1リスポンスという仕様上無理という回答がありましたので選択肢が以下になりました。
1.zipに纏める
2.複数ボタン式
3.回数分通信のいずれ
1は解凍作業があるのと、今回は3ファイルだけでしたので却下。
3はjsで実装してみたものの、通信が重なり失敗。setTimeOutなどで遅らせると成功するもののファイルサイズが大きくなった場合、エラーの原因になるかと思い却下。
ということで2を選択しました。
html,jsでの実装ですのでコードは省かせて頂きます。
ご回答いただいた方、ありがとうございました!