Cuando utilizamos funciones PHP que manipulan los encabezados http, como por ejemplo:
- header()
- setcookie()
- session_start()
Es importante utilizar estas funciones antes de generar el más mínimo flujo hacia el cliente. Desde el momento en que alguna información haya sido enviada al cliente (en general: un inicio de visualización de una página web), esto significará que los encabezados HTTP ya han sido enviados automáticamente a éste. Este tipo de flujo es por lo general enviado con las funciones echo, print, etc.
Si hubiera un espacio libre antes de la primera apertura de etiqueta php, entonces este espacio podría ser enviado como inicio de página web al cliente y por lo tanto automáticamente le precederán encabezados http para indicarle al cliente de que tipo de flujo se trata. A continuación un ejemplo de encabezado con la página de inicio de CCM:
Server: Apache
X-Powered-By: Php/4.4.0-0.dotdeb.0
Keep-Alive: timeout=15, max=50
Connection: Keep-Alive
Transfert-Encoding: chunked
Content-type: text/html; charset=iso-8859-1
Entonces debemos comprender bien el sistema:
- Utilizamos echo, o print al inicio de nuestro script. Del mismo modo, si tenemos un espacio en nuestro script que no está comprendido dentro de nuestras etiquetas php, éste será considerado como parte de la fuente de la página que se va a enviar, y le precederán los encabezados. Lo que puede provocar un error cuya solución nos puede tomar varios días en encontrarla :-)
- El servidor envía estos datos, y por defecto los hace preceder de encabezados que indican que es una página html.
- Si después de esto utilizamos en nuestro script una función que modifica los encabezados, ésta ya no tendrá efecto ya que los encabezados ya han sido enviados. Entonces obtendremos un error del tipo "headers already sent".
PD: El
artículo original fue escrito por kilian contribuidor de
CommentCaMarche