viernes, 19 de febrero de 2021

solucionar error warning: cannot modify header information - headers already sent by en PHP


 

Las funciones PHP que envían o modifican las cabeceras se deben ejecutar antes de que se haya empezado a enviar la página solicitada al usuario. Si no, se producirá el siguiente error:

Warning: Cannot modify header information - headers already sent
(output started at file:line)

Las funciones PHP que modifican las cabeceras HTTP son las siguientes:

*- header() / header_remove()
*- session_start() / session_regenerate_id()
*- setcookie() / setrawcookie()

Y las formas de empezar a enviar contenidos al usuario antes de que se ejecuten esas funciones pueden ser a su vez intencionadas o no intencionadas:
 

📍Intencionadas:
* Mostrar información con print o echo
* Volcar el contenido de variables con var_dump()
* Utilizar alguna de estas funciones: printf(), trigger_error(), vprintf(), ob_flush(), readfile() o passthru().
* Añadir código HTML antes de la etiqueta <?php de apertura
 

📍 No intencionadas:
* Añadir algún espacio en blanco antes de <?php o después de ?>
* El BOM (Byte Order Mark) de UTF-8 (tal y como se explica más adelante)
* Mensajes de error o notices producidos con anterioridad

Principales causas de este error:
 

1-Código HTML antes del código PHP

<!DOCTYPE html>
<?php
// Aquí ya no puedes modificar las cabeceras
 

2-Espacios en blanco normales
<?php
// Incorrecto: hay 1 espacio en blanco por delante de la etiqueta de apertura!
 

3-Espacios en blanco invisibles

Uno de los errores típicos más difíciles de descubrir se produce por el denominado BOM de UTF-8. Básicamente, si al guardas tus scripts de PHP los codificas en formato UTF-8, es posible que tu editor añada una secuencia de caracteres invisibles llamada Byte-Order-Mark (la secuencia en hexadecimal es EF BB BF).

El problema es que algunos editores no muestran esta secuencia de caracteres. Por eso muchas veces no se muestra al abrir el archivo y es muy difícil darse cuenta del error. La solución consiste en configurar bien tu editor para que no añada el BOM al guardar los archivos en formato UTF-8.
 

4- Espacios en blanco después de la etiqueta de cierre

Si añades un espacio en blanco después de la etiqueta de cierre ?>, también se puede producir este error. La solución más sencilla consiste en no añadir nunca la última etiqueta de cierre ?> en los archivos PHP. Si ves el código fuente de cualquier aplicación PHP profesional, verás que nunca añaden esta última etiqueta.
 

5- Errores producidos con anterioridad

Si se produce algún mensaje de error o aviso durante la ejecución del script, también se puede producir este problema. Para evitarlo, puedes hacer uso de la función isset() y también puedes silenciar los errores añadiendo el operador @ por delante del nombre de la función. 

 

¿Como Solucionarlo?

Aqui te enseñamos 3 diferentes formas para solucionarlo.

Solución 1:
Elimina cualquier espacio en blanco en la apertura del codigo PHP, ejemplo:

 
<?php
//Incorrecto

<?php //Correcto

Solución 2:
Elimina cualquier espacio en blanco en el cierre del codigo PHP, ejemplo:

 
//Incorrecto
?>

//Correcto ?>

Solución 3:
Antes de cualquier línea de código html o php coloca el siguiente codigo php:

 
<?php
ob_start();
?>

 
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
Cuerpo del documento
</body>
</html>

 
Al final del documento de donde termina el html coloca este codigo:
<?php
ob_end_flush();
?>

espero y te sirva este posts, leyenda, un gusto que nos hayas visitado, esperemos verte pronto. saludos! 


Citado APA:




0 comentarios:

Publicar un comentario