bueno, es todo lo que puedo decirte, realmente para descargar no hay que hacer prácticamente nada, en el caso de los uploads sí.
veo que después de:
header ("Content-Disposition: attachment; filename=".$_GET['id'].
" ");
tienes ese espacio en blanco, no sé, pero dudo que ese sea el problema, intenta borrarlo, y prueba así:
header ("Content-Disposition: attachment; filename=".
basename($_GET['id']));
veo el código y es casi lo mismo del que consigues en cualquier sitio