いつも本当に助かっています。
PHPのプログラムでファイルをダウンロードさせる際のブラウザ側タイムアウトについての質問です。
今までは、サーバサイドで大規模なCSVを生成し順次レスポンスストリームに流すことでCSVファイルをダウンロードさせていました。
非常に時間がかかる処理ですが、レスポンスストリームにデータが流れ続けているためかタイムアウトにはなりませんでした。
それを「サーバサイドでZIPファイル化し、それをダウンロードさせる方式」にしたところ、CSVファイル生成→ZIP化が完了するまで一切レスポンスがなくなるため、ブラウザ側でタイムアウト(Chromeでは30分)するようになりました。
非同期にすれば解決するのはわかるのですが、できるだけ現状を維持したいため、なるべく簡単な方法を探しています。
そんなに時間のかかる処理はいかがなものか、そんなに大規模なCSVをどうするんだ、という問題もあるかと思いますが、その辺は今回は無視してください。
プログラムのイメージは以下のとおりです。
PHP
1ini_set('max_execution_time', 7200); 2set_time_limit(0); 3 4// ZIPファイル生成のとても時間がかかる処理 5 6header('Content-Type: application/zip;'); 7header('Content-Disposition: attachment;filename="huge.zip"'); 8$file = fopen($zip, 'r'); 9while(!feof($file)) echo fread($file, 8192); 10fclose($file);
Apache2.4
PHP5.6 (CakePHP3.2)
ブラウザ側のタイムアウト(Chrome)

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/20 05:06