Kurzer Nachtrag zu den Headern für jene die mal danach suchen:
neben (den eigentlich nur benötigten) Headern
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $datei_name . '"');
header("Content-Length: $size");
Am besten auch folgende 2 Zeilen angeben damits auch im IE problemlos funktioniert:
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
readfile($filename);