Foros del Web » Programando para Internet » PHP »

Advertencia: La página ha caducado

Estas en el tema de Advertencia: La página ha caducado en el foro de PHP en Foros del Web. Estuve revisando la solucion que le encontraron a este problema en el siguiente post: http://www.forosdelweb.com/showthread.php?t=385315 bueno, yo tengo el problema, pero no logro hacer q ...
  #1 (permalink)  
Antiguo 17/04/2006, 22:11
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 12 años, 10 meses
Puntos: 1
Advertencia: La página ha caducado

Estuve revisando la solucion que le encontraron a este problema en el siguiente post:
http://www.forosdelweb.com/f18/armando-buscador-muerte-ayudan-con-detalle-385315/
bueno, yo tengo el problema, pero no logro hacer q funcione correctamente.
El codigo contine algun error sobre el final de la funcion:
Código PHP:
function cacheando($archivo){
             
$ultima_modificacion "";
             if(
file_exists($archivo))
             {
                  
//lo convierto a GMT (Mexico City)
                  
$timestamp_modif filemtime($archivo)+6*60*60;
                  
//lo ponemos en un string
                  
$ultima_modificacion date("D, d M Y H:i:s",$timestamp_modif)." GMT";
              }
//end file_exists
            //si el archivo no existe, mensaje de error
             
else mensaje_final('badcache2');
             
            
//si cabecera contiene una fecha y es igualita a la proporcionada
            
if($ultima_modificacion == $_SERVER['HTTP_IF_MODIFIED_SINCE'])
            {
                 
header("Location: http://www.google.com");
                 exit;
                 
//header("HTTP/1.1 304 Not changed");
                 //exit;
            
}//end if

             
header("Cache-Control: max-age=0, must-revalidate");
             
header("Pragma: no cache");
             
header("Last-Modified: $ultima_modificacion");
        }
//end elseif ¿qué archivo?

    
else //la llamada fue de manera errónea 
        
mensaje_final('badcache');     

al final me sigue apareciendo q la pagina ha caducado.
__________________
:adios:
  #2 (permalink)  
Antiguo 18/04/2006, 02:32
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 13 años
Puntos: 1
Cita:
El codigo contine algun error sobre el final de la funcion:
No es en realidad un error. Sino que al final de la función yo estoy invocanco a una función llamada mensaje_final() que yo hice. Lo que hace es enviarte a otro lado y mostrarte un mensaje. Pero tú no tienes esa función y por eso te marca error.

Algo que puedes poner en lugar de esa función es:

Código:
echo "Houston, tenemos un problema."; exit;
Si tienes alguna pregunta, pues por aquí andamos. =)

Si en lugar de eso pones lo que en realidad el código

mensaje_final('badcache');
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #3 (permalink)  
Antiguo 18/04/2006, 02:36
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 13 años
Puntos: 1
Aunque esa solución en sí no es para resolver el problema que indica el título de ese post.

En lugar de ello trata de no evitar que la página quede cacheada. Permite que se cachee. Quita tus cabeceras que digan Pragma: no cache y similares.

Las siguientes cabeceras deberían ayudarte a cachear la web por $offset segundos:

header("Cache-Control: max-age=".$offset.", must-revalidate");
header("Pragma: cache");
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #4 (permalink)  
Antiguo 18/04/2006, 02:57
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 12 años, 10 meses
Puntos: 1
el ultimo else... en que caso se ejecuta???
__________________
:adios:
  #5 (permalink)  
Antiguo 18/04/2006, 03:03
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 13 años
Puntos: 1
jajaja, en ningún caso.

Sorry, sí estaba mal pegada, de hecho le sobra esto:

Código:
        }//end elseif ¿qué archivo?

    else //la llamada fue de manera errónea 
        mensaje_final('badcache');
Es que sólo pretendía pega la parte que corresponde al archivo, pero la pegué mal, ahorita voy a modificar el POST fuente, thanks. Mi función cacheando es un poco más completa en cuanto a la aplic. que estoy usando, aunque ahora que lo veo quizá abusé de la pobre función y le di mucho trabajo.

Se me hace que la voy a dividir en otras más funcionales. Saludso !
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #6 (permalink)  
Antiguo 18/04/2006, 03:23
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 12 años, 10 meses
Puntos: 1
que bueno, ya empezaba a dudar de mis aun escazos conocimientos!!

Te cuento un poco, mi buscador esta en la cabecera de todas mis paginas, y cada que hago una busqueda, me muestra el listado (mostrar_res.php)y al hacer click sobre uno de los resultados me manda a (mostrar_det.php). Entonces, como entenderás, el problema viene al querer regresar a (mostrar_res.php).
Inclui la funcion cache.php, al inicio de las paginas, pero como ves, tengo problemas para que funcione adecuadamente.
De momento la funcion va quedando asi:
Código PHP:
function cacheando($archivo){
             
$offset=5;
             
$ultima_modificacion "";
             if(
file_exists($archivo))
             {
                  
$timestamp_modif filemtime($archivo)+6*60*60;
                  
$ultima_modificacion date("D, d M Y H:i:s",$timestamp_modif)." GMT";
              }
//end file_exists
             
else                {
                   echo 
"Houston, tenemos un problema.";
                   exit;
                }
            if(
$ultima_modificacion == $_SERVER['HTTP_IF_MODIFIED_SINCE'])
            {
                 
header("HTTP/1.1 304 Not changed");
                 exit;
            }
//end if

            
header("Cache-Control: max-age=".$offset.", must-revalidate");
            
header("Pragma: cache");

gracias por la ayuda,
Saludos!!
__________________
:adios:
  #7 (permalink)  
Antiguo 18/04/2006, 03:38
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 13 años
Puntos: 1
¿Cuál es tu funcion cache.php ?

Si es como la función cacheando("nombrearchivo") que está arriba, asegúrate de que:

- Le estás pasando el nombre del archivo. Como:

cacheando("mostrar_res.php");

- También de que no haya otras cabeceras, ni vía PHP con header() ni mediante cabeceras en HTML (meta)

Entra a mostrar_res.php y has click en F5. Si te direcciona a Google, es que está funcionando. Al decirte 'redireccionar a google' me refiero a descomentar cierta parte del código:
header("Location: http://www.google.com");
exit;
//header("HTTP/1.1 304 Not changed");
//exit;



- Si aún no, pues comienza a debbugear la función. Coloca dentro de ifs algunos:

echo "toy aqui";exit;

p' saber en dónde sí estás entrando, y en dónde no. Salutes ! =)
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #8 (permalink)  
Antiguo 18/04/2006, 03:56
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 12 años, 10 meses
Puntos: 1
Ahora cuando le doy F5 mostrar_res.php, me vuelve a hacer la busqueda, pero cuando voy a mostrar_det.php y hago click en VOLVER, ya no me aparece el mensaje que caduco, y aparentemente no vuelve a relaizar la consulta, que es lo que se busca.
el codigo de cache.php, que es donde esta la funcion, esta de la sgte manera:
Código PHP:
function cacheando($archivo){
             
$offset=50;
             
$ultima_modificacion "";
             if(
file_exists($archivo))
             {
                  
$timestamp_modif filemtime($archivo)+6*60*60;
                  
$ultima_modificacion date("D, d M Y H:i:s",$timestamp_modif)." GMT";
              }
//end file_exists
             
else                {
                   echo 
"Houston, tenemos un problema.";
                   exit;
                }
            if(
$ultima_modificacion == $_SERVER['HTTP_IF_MODIFIED_SINCE'])
            {
                 
header("Location: http://www.google.com"); 
                 exit;
                 
//header("HTTP/1.1 304 Not changed");
                 //exit;
            
}//end if

            
header("Cache-Control: max-age=".$offset.", must-revalidate");
            
header("Pragma: cache");

Otra consulta, el tiempo de offset, esta en msegundos, segundos, minutos???
__________________
:adios:
  #9 (permalink)  
Antiguo 18/04/2006, 04:01
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 12 años, 10 meses
Puntos: 1
Al inicio de cada página va lo sgte:
Código PHP:
<?php
      session_start
();
      include (
'mundoman_fns.php');
      
cacheando("mostrar_res.php");
?>
si el session_start() lo pongo despues de cacheando(), me aparece el mensaje de caducidad, pero al ir al inicio funciona bien.
__________________
:adios:
  #10 (permalink)  
Antiguo 18/04/2006, 08:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sólo recordar que el uso de sesiones ya ajusta por defecto algunos tipos de control del caché de las páginas generadas que usen sesiones.

Me refiero a:

session_cache_limiter()
www.php.net/session_cache_limiter

Se usa antes de session_start() y por defecto define php.ini un "private" (si mal no recuerdo) ..

Respondiendo al título original del tema: "Advertencia: La página ha caducado " .. sería cosa de ajustar vía esa función a "public" o equivalente para que tu página sea "cacheada".

En los comentarios de los usuarios de dicha función aparecen más soluciones al respecto.


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 18/04/2006, 17:12
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 13 años
Puntos: 1
Está en segundos ese parámetro, offset.

Aunque te ha funcionado, no funciona como debería, en lugar de cacheando() bien podrías sólo usar:

header("Cache-Control: max-age=".$offset.", must-revalidate");
header("Pragma: cache");

o meterle el session_cache_limiter()

Esa de cacheando quizá vaya más con la página de resultados siempre y cuando en tu formulario de búsqueda uses el método GET para enviarla. De esa manera, si el usuario busca lo mismo que antes y aún no han pasado más de $offset cantidad de segundos, la página sería cargada inmediatamente. Y si ya pasó esa cantidad de segundos, entonces se le solicitará al server nuevamente la información, pero al ser la información la misma, no se gastará ancho de banda y sólo se enviará un código 304 (temporalmente simulada como una redirección hacia Google).

Saludos, qué bueno que no tienes el problema.

Gracias Clúster, esa función no la conocía y veo que al fin me voy a poder librar de la molesta cabecera EXPIRE.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
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.
Tema Cerrado




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