Też miałem problem taki problem z downloadem. Ale napisałem skrypt, podzielę się z nim.

No więc działa na dwóch plikach i folderze z plikami - ot, żeby nie było bałaganu na serwerze.

Pliki te są małe, oczywiście można je rozbudować, dodać jakieś zabezpieczenia, opcję pobierania id z bazy itd.. Ja potrzebowałem zwykły download.
Pierwszy plik znajduje się w głównym folderze serwera:
(http://www.example.com/download.php)
<?
if(isset($_GET['downit'])) { $downit=$_GET['downit'];
Header ('Location: download/downit.php?downit='.$downit); } else {
echo ('Nie znaleziono pliku!'); }
?>
Drugi plik znajduje się w folderze z plikami, na przykład w folderze download którego nazwę użyłem w pierwszym pliku.
(http://www.example.com/download/downit.php)
<?
$downit=$_GET['downit'];
Header ('Content-Disposition: attachment; filename="'.$downit.'.zip"'); ?>
Jak to działa i o co wogóle chodzi? Już tłumaczę. Na jakiejś podstronie serwisu która znajduje się w głównym folderze (to ważne gdzie!) dajemy link do pliku o nazwie muzyka.zip:
http://www.example.com/download.php?downit=muzyka . Gdy kliknie się na ten link serwer przechodzi do strony
http://www.example.com/download/downit.php?downit=muzyka - przenosi za pomocą GET id pliku (nazwę) do pliku downit.php, który wysyła info do przeglądarki że coś trzeba pobrać.
Czemu tak to skomplikowałem? Nie wiedzieć czemu serwer na którym znajduje się moja strona gdy wpisywałem zamiast ('Content-Disposition: attachment; filename="'.$downit.'.zip"') w downit.php w folderze download, od razu ścieżkę w download.php w głównym folderze, czyli ('Content-Disposition: attachment; filename="download/'.$downit.'.zip"') zamiast pliku pobierała sie strona o tej nazwie z rozszerzeniem *.zip.html

Poza tym ten skrypt mam usterkę chyba nie do naprawienia. Sprawdzałem go na 3 przeglądarkach (opera, firefox i IE). W IE gdy ściągałem wbudowanym menadżerem ściągało się bez problemów, gdy ściągałem wbudowanym w firefoxie ściągało się też bez problemów. Problemy się zaczęły gdy pobierałem dodatkiem do firefoxa - akceleratorem pobierania. Ściągało tak jak przy skrypcie który próbowałem na początku, ściągał się plik html, z operą było to samo.
Mam nadzieję że chodź trochę pomogłem. Może ktoś mógłby coś tu zmienić, ciekaw jestem czy da się to naprawić lub uprościć.