PHPでファイルをダウンロードさせるにはfile_get_contents,filereadとfilereadがある

https://norm-nois.com/blog/archives/1729
file_get_contentsは、ファイルを変数に読み込む。
filereadは、PHPリファレンスに「readfile() 自体にはメモリに関する問題はなく、 巨大なファイルを送ってもかまいません。」という注意書きがる。
巨大なファイルをダウンロードさせるときに一番良いのは

$fp = fopen($url, 'rb');
while(!feof($fp)) {
    $buf = fread($fp, 1048576);
    echo $buf;
    ob_flush();
    flush();
}
fclose($fp);

のようにある程度の量ずつ書き出していく方法だと思われる。