Warning: session_start(): Cannot send session cookie - headers already sent by…
Autor: aartiles | Archivado en: PHP el día 29/Oct/2009
Hoy os traigo un mini tip de PHP para solucionar un problema bastante común y escasamente documentado, o al menos yo tardé un rato en encontrar solución.
Se trata del error:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /path/to/my/file/tienda.php:1) in /path/to/my/file/tienda.php on line 2
Este error de PHP suele suceder cuando se intenta modificar el header de la página y ya se ha enviado algún carácter al buffer. Por ejemplo si ya hemos impreso un texto en la página e intentamos enviar una cookie o redirigir hacia otra página esto implicará una modificación de las cabeceras del protocolo HTTP y obtendremos el error anterior.
Normalmente sucede cuando te dejas un carácter regado en alguno de los includes que uses o algún warning o notices que se esté imprimiendo antes, y esto te puede dar su trabajo encontrarlo.
Pero lo que me sucedió a mi es que por alguna razón mis archivos tenían unos caracteres invisibles al inicio. Después de una largo rato buscando, el mítico Foros de Web me dio la solución. El problema es que algunos editores al guardar un archivo con codificación UTF-8 añaden al principio del archivo 3 caracteres hexadecimales, lo cual genera dicho error.
La solución es muy simple, un editor hexadecimal como Free Hex Editor Neo que tiene una versión gratuita con la que podrás abrir el archivo eliminar esos tres caracteres iniciales y guardarlo
Descarga: Free Hex Editor Neo













Información Bitacoras.com…
Valora en Bitacoras.com: Hoy os traigo un mini tip de PHP para solucionar un problema bastante común y escasamente documentado, o al menos yo tardé un rato en encontrar solución. Se trata del error: Warning: session_start() [function.session-start]:…
Hombre, hay varias opciones además de esa…
Si lo vas a volcar a un sistema Unix puedes trabajar en ISO todo el rato y luego pasar a UTF8 con el comando “iconv”.
Otra opción, en Unix abres el archivo con un editor de textos, como por ejemplo VI y borras esos caracteres, que en Unix se ven perfectamente.
Y cambia de IDE para trabajar si te mete esos caracteres al programar en UTF8, jejeje
Pues en realidad los archivos no los generé yo, sino que son de un cliente al que le migramos un sistema hacia nuestros servidores.
No conocía las soluciones en Unix, gracias por la aportación ;)
jajaja… que buen post ;) me salvo de no tener mas ese Warning asqueroso jajaja.
Muchas Gracias.
Esos tres caracteres son el BOM de UTF-8. El editor vi de Unix NO los muestra porque los interpreta. La mayor parte de editores tampoco los muestran. La opción de un editor hexadecimal es muy buena idea. En mi caso los quité con Notepad++ convirtiendo el archivo a “UTF-8 sin BOM”.
Se trata de un bug de PHP por el que muestra el BOM, cuando debería interpretarlo al igual que hacen los editores de texto (como vi).
Por cierto, el BOM indica la codificación del archivo.
Gracias por este aporte me ha ayudado mucho, pues tenia toda una noche buscando la solucion. Se agradece
Saludos y Bendiciones