session_start(): Warning Sessio cache limiter - headers alredy sent

Como todos sabemos la instrucción que crea las sessiones:

session_start();

debe de estar al principio de todo de fichero para evitar problemas.  Esta función puede estar mas abajo siempre que tengamos claro que no hemos usado ninguna otra función de php o html que saque texto o qualquier cosa a la salida del navegador.

Pero que pasa cuando en la primera linea del fichero sin nada mas por encima que el tag de abrir php <? ó <?php

Se nos queja de que las cabeceras ya han sido enviadas, sin que nostros hayamos echo ningún "echo", ni print_r o print o nada por el estilo?

Que está ocurriendo cuando se queja que hemos enviado ya algún caracter y no lo vemos? Entonces se nos queja algo al estilo así:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/xxxx/public_html/miproyecto/index.php:1) in /home/xxxx/public_html/miproyecto/index.php on line 2

Como puede ser que en la línea 1 o linea 2, ya hayamos enviado algun dato al navegador?

la cuestion es muy sencilla hay caracteres que no somos capaces de ver y que el editor que usamos para editar los fichoros no nos muestra y lo peor no lo podemos borrar con suprimir, ni bakspace. Por algún motivo, ese fichero tiene al principio algun caracter no representable que nos está fastidiando.

si abrimos el fichero con algun otro editor llegaremos a ver algo al estilo:  ï¿½ï¿½ 

La solución es crear un nuevo fichero y copiar el codigo en este nuevo fichero y al subierlo. todo funcionará conrrectamente.

Otro problema al usar includes, que seguir la pista de si hemos echo algun eco es mas dificil. Puesto que en proyectos grandes, puedemos tener vairos ficheros unos incluyendose a otros, etc.

Así si el problema no es de nuestro fichero sino de algun include. podemos arreglar el fallo usando buffers de salida.

en la primer linea ponemos nuestro ob_strat(); quien incia el buffer y toda salida a pantalla quedara atapada en el hasta que hagamos dos cosas:

  • $variable=ob_get_contents() ; //->nos pone el contenido del buffer en una variable por si queremos usarlo
  • ob_end_clean(); //-> elimina todo el buffer, y el posible caracter ilegal que nos esta fastidiand
  • ob_end_flush(); //-> saca el contenido del buffer al navegador.
evidentemente en nuestro caso usariamos el segundo.
El ejemplo quedaría algo asi:
PHP:
  1. ob_start(); // inciamos el buffer
  2. include('primerFichero.php');
  3. include('segundoFichero.php');
  4. include('segundoFichero.php');
  5. ob_end_clean(); // borra textos de debug u otras salidas que no interesarian
  6. //inicio de session

espero que os sirva de ayuda.

Etiquetas: , , , , , , ,

2 comentarios para “session_start(): Warning Sessio cache limiter - headers alredy sent”

  1. cce dice:

    Buenas, estoy trabajando con php-apache2 y linux y estoy haciendo una pagina web.
    Desde un formulario que me muestra una lista de nombres, seleccionando uno se abre una nueva ventana. Para eso implemente un scrip con java, el codigo es el siguiente:

    eliminar_registro($datos);

    echo "Baja Satisfactoria";

    echo "";
    echo " La baja del sistema de: ".$datos['nombre'].", ha sido satisfactoria.! ";
    echo "";

    echo "";

    echo "";

    Esto es parte del codigo...Una vez q pruebo la pagina una y otra vez llega un momento en que no puedo iniciar sesion, porque no funciona la funcion session_start()...Probe borrando las cookies y la pagina funciona bien...Pero como evitar este problema para que no vuelva a suceder.?

    Saludos y gracias.-

  2. cce dice:

    veo q no salio part del codigo...pero es algo asi...onclick='window.close();'..para abrir una nueva ventana utilizo un boton

Deja un comentario

CAPTCHA Image Audio Version
Reload Image