※こちらは旧サイトです(新サイトはこちら

PHP経由でファイルダウンロード時に余分なデータが含まれる時の対処法

2017-09-19 17:06:55

コード(修正前)

    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バイト増えるちゃん

-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を読んで出力バッファをクリアする

    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();

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