コード(修正前)

1
2
3
4
5
6
7
8
9
10
header('Content-Type: force-download');
header('Content-Disposition: attachment; filename='.$fileName);
header('Content-Length: '.filesize($filePath));

$handle = fopen($filePath, "r");
while(!feof($handle))
{
echo fread($handle, 4096);
}
fclose();

3バイト増えるちゃん

1
2
3
4
5
-rw-r--r-- 1 hogehoge なし 245239 9月  19 16:12 元ファイル.jpg
-rw-r--r-- 1 hogehoge なし 245242 9月 19 16:12 ダウンロードしたファイル.jpg

-rw-r--r-- 1 hogehoge なし 24543 9月 19 16:07 元ファイル.xlsx
-rw-r--r-- 1 hogehoge なし 24546 9月 19 16:07 ダウンロードしたファイル.xlsx

コード(修正後)

echo前にob_end_cleanを読んで出力バッファをクリアする

1
2
3
4
5
6
7
8
9
10
11
12
header('Content-Type: force-download');
header('Content-Disposition: attachment; filename='.$fileName);
header('Content-Length: '.filesize($filePath));

ob_end_clean(); /* 追記 */

$handle = fopen($filePath, "r");
while(!feof($handle))
{
echo fread($handle, 4096);
}
fclose();

参考:出力バッファリング制御