Foros del Web » Programando para Internet » PHP »

PHP y Explorer

Estas en el tema de PHP y Explorer en el foro de PHP en Foros del Web. Hola, Espero que me podáis ayudar con el siguiente problema. Tengo una página php donde hay una imagen. Esta imagen puede ser cambiada por el ...
  #1 (permalink)  
Antiguo 25/12/2011, 05:29
 
Fecha de Ingreso: abril-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 1
PHP y Explorer

Hola,

Espero que me podáis ayudar con el siguiente problema.

Tengo una página php donde hay una imagen. Esta imagen puede ser cambiada por el usuario cuando lo desee, subiendo otra en su lugar. Para no mantener en el servidor imágenes que no se usan, cada vez que se sube una imagen, se elimina la que hay y la nueva se nombra con el mismo nombre que la que había. De esta forma, sólo se sustituye la imagen y no se toca el código.

El problema es esto funciona con cualquier navegador, excepto con... Explorer :S Sospecho que Internet Explorer lo que hace es descargar la imagen del servidor al cargar la página y al recargarla, comprueba el nombre de la imagen y si no ha cambiado no recarga la imagen. El problema que tengo es que la imagen es distinta, pero el nombre es igual, por lo que siempre carga la imagen antigua que ya no existe en el servidor. Si se pulsa el icono de actualizar del navegador, sí que se muestra la nueva imagen. Supongo que al actualiar vuelve a descargar la imagen, pero necesito que cuando se pulsa el botón "Guardar imagen" de la página y se redirecciona a una página que ya había sido cargada antes, la imagen se actualice sin que el usuario tenga que ir a pulsar el icono actualizar del navegador.

Se os ocurre alguna solución??

Gracias por todo!!
  #2 (permalink)  
Antiguo 25/12/2011, 06:32
Avatar de charlyalegret  
Fecha de Ingreso: septiembre-2011
Ubicación: Barcelona
Mensajes: 705
Antigüedad: 12 años, 6 meses
Puntos: 140
Respuesta: PHP y Explorer

Hola!
Primero, cómo haces la redirección a la página anterior?
Saludos
  #3 (permalink)  
Antiguo 25/12/2011, 09:57
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 12 años, 6 meses
Puntos: 48
Respuesta: PHP y Explorer

no estoy seguro de esto pero prueba igual :P
Código PHP:
Ver original
  1. <?php
  2. header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
  3. header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Fecha en el pasado
  4. ?>

al comienzo de tu codigo.
  #4 (permalink)  
Antiguo 25/12/2011, 10:25
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: PHP y Explorer

Si, al parecer es un problema de caché. Si las imágenes guardadas las estás guardando todas en una misma carpeta, podés crear un .htaccess en dicha carpeta, con

Código Apache:
Ver original
  1. <FilesMatch "\.(gif|png|jpg|jpeg|bmp)$">
  2.     Header unset Cache-Control
  3.     Header unset Expires
  4.     Header unset Last-Modified
  5.     FileETag None
  6.     Header unset Pragma
  7. </FilesMatch>

Si también querés evitar que se cachee el php que realiza la operación (aunque con lo anterior creo que debería solucionarse), a lo dicho por @Rodrhigo podrías mejorarlo con

Código PHP:
Ver original
  1. header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
  2. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  3. header("Cache-Control: no-store, no-cache, must-revalidate");
  4. header("Cache-Control: post-check=0, pre-check=0", false);
  5. header("Pragma: no-cache");

si tras la operación de cambio, estás recargando la misma página con javascript. usa
document.location.reload(true);, el parámetro true recarga desde el servidor y no de la cache.

Son alternativas para que pruebes, pero todo depende de como este hecha la aplicación en su conjunto

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 26/12/2011, 04:19
 
Fecha de Ingreso: abril-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 1
Respuesta: PHP y Explorer

Hola,

Muchas gracias por la ayuda, pero sigo sin poder soluiconarlo :(

La redirección a la página anterior la hago con "header". En realidad tengo una página donde hay un formulario en el que se sube la imagen, al pulsar el botón, envía el formulario a una página que carga la imagen y hace los cálculos, y esta página vuelve a redirigir a la primera donde estaba el formulario y donde debería de verse la imagen nueva.

He probado haciendo:

header ("Expires: Thu, 27 Mar 1980 23:59:00 GMT"); //la pagina expira en una fecha pasada
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); //ultima actualizacion ahora cuando la cargamos
header ("Cache-Control: no-cache, must-revalidate"); //no guardar en CACHE
header ("Pragma: no-cache");

y

<meta http-equiv="Expires" content="0">
<meta http-equiv="Last-Modified" content="0">
<meta http-equiv="Cache-Control" content="no-cache, mustrevalidate">
<meta http-equiv="Pragma" content="no-cache">

para refesacar la caché del navegador pero no funicona.

Creando los el .htaccess que comentabais tampoco funcionan. No carga ninguna imagen.

También he probado insertando la imagen en el html con:

<img src='imagen.jpg?<?php echo uniqid();?>'>

pero tampoco carga ninguna imagen. Imagino que ya la primera la considera obsoleta.

Se os ocurre alguna otra idea... :(

Gracias por la ayuda!!
  #6 (permalink)  
Antiguo 26/12/2011, 09:04
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: PHP y Explorer

Hacé la siguiente comprobación (con Firefox es más fácil de visualizar)


Abri Firefox
Vacía la cache de Firefox (importante)

visitá
http://foros.emprear.com/img_fdw/nc/nc.php
Ese archivo carga un jpg y un png, y el mismo php obviamente
en una nueva pestaña, tipeá, about:cache
En la sección Disk cache device, usá el link "list cache entries", fijate las fechas de expiración de los archivos (nc.ph / a.jpg, b.png) y vas a ver que están todasen el pasado, es decir, expiraron.

para el php, n siquiera hizo falta esto
Código PHP:
Ver original
  1. header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
  2. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  3. header("Cache-Control: no-store, no-cache, must-revalidate");
  4. header("Cache-Control: post-check=0, pre-check=0", false);
  5. header("Pragma: no-cache");

En definitiva, el problema debería ser, como ya indiqué, en como construiste la aplicación.
Otra posibilidad sería que no tengas permisos para ejecutar .htaccess.

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: explorer, usuarios
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 19:43.