PHPで大きいファイルのダウンロード

音楽配信システムでオーディオだけでなく動画ファイルのダウンロードに対応させようとしたときに、PHPで大きいファイルのダウンロードに対応させないとならなくなりました。
その時に利用した方法を忘れないように書いておこうと思います。

普通にreadfile()で出力させていたら、out of memoryエラーになってしましたが、下記の通りに修正したら無事にファイルのダウンロードが出来るようになりました。


$filePath = 'ファイルのパス';
ob_end_clean();
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="ファイル名"');
header('Content-Length: '.filesize($filePath));
readfile($filePath);
exit;

出力前にob_end_clean()を記述してアウトプットバッファのレベルを0にしてやれば、fread()を使用して少しずつ出力したりしなくても大丈夫っぽいです。
これだけなので、ダウンロードが必要なコードには忘れないでob_end_clean()を記述するようにしよう。

LINEで送る
このエントリーをはてなブックマークに追加
Share on Facebook

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>