質問: 0)) { echo fread($file, '4096'); ob_flush(); } ob_flush(); fclose($file); } ob_end_clean(); exit; ``` ### 試したこと header('Content-Type: application/force-download'); header("Content-Type: application/octet-stream"); header("Cache-Control: public"); header("Pragma: public"); 上記の様にヘッダーをIEの場合など、変更や追加をしましたがダメでした。 またPHP側のファイル出力をreadfile()で行っても結果は同じでした。 ### 補足情報(FW/ツールのバージョンなど) 開発環境 ローカルPC CPU:Intel(R) Core(TM) i7-8700 CPU @ 3.2GHz 3.19 GHz メモリ:16GB XAMPP:3.2.3 PHP:5.6.40
回答: httpd の error_log にエラー情報が記録されているかどうかをまず確認するのと、 ダウンロードにかかる時間で打ち切られるまでの時間を秒単位で計測するのをお試しください。 そのうえで、 下記の設定項目を見直しをかけます。 PHP.ini にて、 PHPの処理時間の上限値である max_execution_time が設定されていなければ適切に設定する。 初期値は30秒らしいので、30秒付近で打ち切られるようならこの設定値。 他には、 ignore_user_abort が初期値FALSEらしいのだけど、これをTRUEにすることで ユーザーが接続を切っても実行し続けることができるとか。 (これを解説するページが少ないので、有効性は不明。) それと、 IE11のPCにて、KeepAlive値を調整するのもやるとヨサゲ。 Internet Explorer の既定の Keep-Alive タイムアウト値を変更する方法 レジストリの操作によって変更できるようです。 apache httpd側の設定としては、 TimeOutディレクティブは 通常60秒らしいので60秒付近で打ち切られるようなら、これかもしれないが。 直接関係ないけど、 処理時間を計測するために apache httpdのログ出力をカスタマイズしてみるのはどうだろう。 Apacheのログ出力の要点 - Qiita Apacheのアクセスログに処理時間を出力する - takami_hiroki’s blog 処理時間が、ChromeからとIE11からとで変わるのかどうか。 その時の access_log の変化を読む。とか。