El error es bastante evidente, ¿si te das cuenta que también estás colocando HTML en el script?
Esa es la razón de que el archivo esté corrupto, la idea es que sólo imprimas la información del archivo pero como tienes HTML entonces se mezcla todo.
Aquí el ob_start() no sirve de nada, que aunque oculta el error del header() finalmente es todo el script el que hace mal el trabajo.
Deja únicamente el código PHP y verás.