ok, questo codice è decisamente meglio, anche perché non ti killa la memoria del server

però
$buffer = fread($fd, 2048);
echo $buffer;

lo puoi trasformare in
echo fread($fd, 8192);

ovvero gli dici di leggere 8kb per volta (nella media è il valore più efficente)

inoltre ti conviene usare l'istruzione flush dopo, ad esempio, 5 invii

da
while(!feof($fd)) {
$buffer = fread($fd, 2048);
echo $buffer;
}

a
$counter=0;
while(!feof($fd)) {
echo fread($fd, 8192);
$counter++;
if ($counter % 5)
{
flush();
}
}

Originariamente inviato da thefalcon
Così funziona!

Rimarrebbe il problema dell' AllowOverride .. ..



Codice PHP:
$path "mp3/";
$file $_GET['download_file'];
$fullPath $path.$file;

if (
$fd fopen ($fullPath"r")) {
    
$fsize filesize($fullPath);
    
$path_parts pathinfo($fullPath);
    
$ext strtolower($path_parts["extension"]);

    
header("Content-type: application/octet-stream");
    
header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
    
header("Content-length: $fsize");
    
header("Cache-control: private"); //use this to open files directly

    
while(!feof($fd)) {
        
$buffer fread($fd2048);
        echo 
$buffer;
    }
}
fclose ($fd);
exit;