Cita: pero el fichero que descargo se me agrega el encabezamiento del fichero en que estoy
Que significa eso?
Por lo demás .. si tu en ese script compones tu contenido a entregar a descargar .. NO es necesario que crees un archivo para luego componer las cabeceras HTTP (con header()) y lo lees para entregarlo al buffer de salida (con readfile()) .. Tan sólo debes hacer:
echo $str;
en lugar de readfile() .. y omitir todo ese código que genera ese archivo ...
A todo esto .. cuando pongas código en el foro .... "intenta" limpiarlo de tus pruebas (de código que comentes y demás .. suele confundir más que ayudar).
Un saludo,