Foros del Web » Programando para Internet » PHP »

session_start y otros headers

Estas en el tema de session_start y otros headers en el foro de PHP en Foros del Web. Tengo una función para poner en caché imágenes que funciona correctamente enviando unos headers al navegador. El problema es que al integrarlo en mi código ...
  #1 (permalink)  
Antiguo 01/09/2012, 13:24
Avatar de Adrii952  
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 116
Antigüedad: 12 años, 3 meses
Puntos: 7
session_start y otros headers

Tengo una función para poner en caché imágenes que funciona correctamente enviando unos headers al navegador.

El problema es que al integrarlo en mi código principal no funciona el caché.

Experimentando he llegado a la conclusión de que session_start() es el causante del problema, y también he visto que el propio session_start envía headers al navegador, por lo que entiendo que eso es lo que causa el conflicto y por eso falla el caché de imágenes con todo el código junto.

¿Sabría alguien solucionar este problema? Gracias
  #2 (permalink)  
Antiguo 01/09/2012, 16:43
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: session_start y otros headers

Porqué llegaste a la conclusión de que session_start() es el causante del problema? Tal vez porque recibes un mensaje de error acerca de que no se pudieron enviar los encabezados porque hubo una salida previa?

Resulta que session_start() sólo envía encabezados para crear/recuperar la cookie donde se almacena el ID de sesión y eso no interfiere en absoluto con otros encabezados.

Entonces, en alguna parte de tu script tienes un espacio, salto de línea o cualquier otro caracter que hace que PHP inicie la salida y cualquier encabezado que pretendas enviar fallará.

Haz que se muestren todos los errores y advertencias de PHP para que puedas determinar dónde se inició la salida y corregir tus scripts., sólo coloca esto al inicio:

Código PHP:
Ver original
  1. ini_set('display_errors','On');
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 01/09/2012, 18:37
Avatar de Adrii952  
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 116
Antigüedad: 12 años, 3 meses
Puntos: 7
Respuesta: session_start y otros headers

Ok mañana pruebo y te cuento pero dudo que ese sea el problema, lo he mirado mucho. He llegado a la conclusión de que el causante es session_start() porque hice un script aparte para ver cual era el problema y fui quitando comandos hasta que funcionaba correctamente y resulta que sólo al quitar el de session_start funcionaba correctamente, si lo pongo deja de funcionar, no sé por qué, tendré qe investigar más.

Las funciones para cachear la imagen son las siguientes:

Código PHP:
function displayGraphicFile ($graphicFileName,$fileType) {
  
$fileModTime filemtime($graphicFileName);
  
$headers getRequestHeaders();
  if (isset(
$headers['If-Modified-Since']) && (strtotime($headers['If-Modified-Since']) == $fileModTime)) {
    
header('Last-Modified: '.gmdate('D, d M Y H:i:s'$fileModTime).' GMT'true304);
  } else {
    
header('Last-Modified: '.gmdate('D, d M Y H:i:s'$fileModTime).' GMT'true200);
    
header('Content-type: '.$fileType);
    
header('Content-transfer-encoding: binary');
    
readfile($graphicFileName);
  }
}

function 
getRequestHeaders() {
  if (
function_exists("apache_request_headers")) {
    if(
$headers apache_request_headers()) {
      return 
$headers;
    }
  }
  
$headers = array();
  if (isset(
$_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
    
$headers['If-Modified-Since'] = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
  }
  return 
$headers;

Gracias por su ayuda

Etiquetas: headers
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:22.