@carlangueitor
una aclaración respecto de los headers() de php, no siempre una salida html previo al envío del header genera un error
manual php
Cita: Nota:
Se puede usar búfer de salida para evitar este problema, procesando en el servidor todo el contenido a mostrar en el navegador antes de ser enviado. Se puede hacer esto usando ob_start() y ob_end_flush() en el script, o definiendo la directiva output_buffering en el php.ini o en los ficheros de configuración del servidor.
Y en muchos casos los servidores tienen configurado
output_buffering = 4096 en php.ini, con lo que el error no se genera.
De todas formas, la práctica correcta para evitar cualquier tipo de problema, es pasarlos al inicio del php, previos a cualquier salida html
Saludos