前提・実現したいこと

PHPで、外部ファイルのmp4のURLを複数取得し、ループさせ、1つずつダウンロードしたい。

発生している問題・エラーメッセージ

samp;e1.mp4 sample2.mp4 sample3.mp4とダウンロードされるはずが
sample1.mp4だけがダウンロードされ、しかもファイルサイズが巨大になる。(2~以降の分も入っている?)
そして、その動画も壊れているようで再生できない。

些細なことでもお分かりの方がいましたら、助かります。

該当のソースコード

<?php
$c = 1;
foreach( $urls as $url){
    $header = get_headers($url, 1);
    mb_http_output("pass");
    header("Cache-Control: public");
    header("Pragma: public");
    header('Content-Type: application/octet-stream');
    header('Content-Length: '.$header['Content-Length']);
    header('Content-disposition: attachment; filename="sample'.$c.'.mp4"');
    $c = $c + 1; 
    $fp = fopen($url, 'rb');
    while(!feof($fp)) {
        $buf = fread($fp, 1048576);
        echo $buf;
        ob_flush();
        flush();
    }
    fclose($fp);  
}
?>

試したこと

ループ処理にせず、単一のURLだけ指定するとうまくダウンロードでき、動画も再生できる。
URLは正しく取得できていることはログで確認済みです。

補足情報(FW/ツールのバージョンなど)

php7です。
linux環境です。