scusami djhell, ma prima di dare consigli, risposte e suggerimenti è BENE verificare le proprie idee e conoscenze
strlen restituisce la lunghezza di una stringa, $buffer in questo caso che è una variabile contenente una stringa caricata tramite la funzione file_get_contents
la tua soluzione, probabilmente, funziona, solo che uccidi (nel senso pratico del termine) il server per nel momento in cui fai un echo con le OB attivate lui ha in memoria la variabile $buffer per 2 volte, praticamente! Basta avere un file mp3 di 4/5 mb ed esplode tutto
detto questo
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
non servono, qualche riga dopo risovrascrivi di nuovo l'header content type ^^
Ti consiglio comunque di mettere l'octet-stream