PHP経由でダウンロードしたファイルが壊れてしまう
· パーマリンク
現象
PHPを経由してダウンロードさせたファイルが壊れてしまう
原因
PHPないからファイルを出力する際に出力バッファに残ったゴミが一緒に出力されてしまい、結果ファイルが壊れてしまう
対策
出力バッファの中に残ったゴミが問題なので、ファイルの中身を出力する前にob_end_clean()を使って出力バッファの中身をクリアすれば良い
未対策の例
// 前略
header('Content-Type: application/octet-stream');
// ファイルの内容を出力する
readfile($path, FILE_BINARY);
exit;
対策例
// 前略
header('Content-Type: application/octet-stream');
// ファイルの内容を出力する前に入力バッファの中身をクリアする
ob_end_clean();
readfile($path, FILE_BINARY);
exit;