Non, ça n'a rien a voir :
Avant d'envoyer un fichier, il faut envoyer des infos au navigateur, pour qu'il sache comment réagir. C'est le role des header envoyés... Une fois ces headers envoyés, le navigateur attend les données : le fichier.
Si tu fais seulement un header ("Location: $file"); Tu rediriges directement sur ton fichier, et suivant le navigateurs, ça va faire du n'importe quoi...
En tous cas, je pense que tu t'es mal exprimé en
./9, mais faire un header ("Location: ") "a la place" du readfile ne marche pas du tout, vu que tu as déja envoyé les en-tetes http : le navig attend des données, pas une redirection...