Imagen de actualización forzada de PHP

4 minutos de lectura

Estoy creando un formulario de entrada que permite a los usuarios cargar una imagen. Una vez que se ha enviado, el usuario regresa al formulario con un bit de confirmación en la parte superior.

Cualquier imagen que se haya enviado se previsualiza a través de una consulta a una base de datos MySQL que almacena la URL de la imagen. Sin embargo, si el usuario sube una foto, se muestra una vista previa y luego decide cambiar esa foto y volver a enviar el formulario, cuando lo lleva de vuelta al formulario, la nueva foto no se muestra a menos que presione actualizar manualmente en el navegador.

¿Hay alguna forma de forzar una actualización/eliminación de caché o una actualización para esa imagen específica en lugar de toda la página?

Gracias

Imagen de actualizacion forzada de PHP
reactivo

Agregue la fecha de modificación al final de la imagen como una consulta.

<img src="https://stackoverflow.com/images/photo.png?=1239293"/>

En PHP

<img src="https://stackoverflow.com/images/photo.png?=<?php%20echo%20filemtime($filename)?>"/>

  • ¿Qué función recomendaría para generar la marca de tiempo?

    – Dorian Huxley

    13 mayo 2013 en 16:15

  • Acabo de agregar el signo de interrogación sin marcas de tiempo cuando engañé la recarga de los navegadores.

    – mejor programador del mundo

    13 mayo 2013 en 16:26

  • Si las imágenes están almacenadas en el disco duro, puede usar el resultado entero de filemtime. Funciona incluso si sobrescribe el archivo de imagen antiguo. php.net/manual/en/function.filemtime.php

    – Reactular

    13 mayo 2013 en 16:28

  • Una cosa a tener en cuenta es que, en ausencia de encabezados de almacenamiento en caché configurados a nivel de servidor, la presencia de un ? puede cambiar la suposición predeterminada del navegador de “almacenar en caché por un tiempo porque es una imagen” a “nunca almacenar en caché porque tiene una cadena de consulta”. Lo cual está bien para este caso, pero no siempre lo que se pretendía.

    – IMSoP

    16 jun.


En PHP puede enviar un número aleatorio o la marca de tiempo actual:

<img src="https://stackoverflow.com/questions/16526363/image.jpg?<?=Date("U')?>">

o

<img src="https://stackoverflow.com/questions/16526363/image.jpg?<?=rand(1,32000)?>">

  • Esto solía funcionar en mi script y ya no funciona. suspiro

    – Nova

    21 nov.

  • No hay razón para que no funcione, a menos que esté en un almacenamiento en caché de proxy e ignore los parámetros de URL.

    – Arvy

    04 abr.

El truco aquí es decirle al navegador que no almacene en caché el contenido. Puede hacer esto poniendo estas declaraciones antes de CUALQUIER otra COSA (¡sin espacios en blanco ni nada!)

<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

Dependiendo de cómo esté cargando la imagen, también puede hacer una actualización de javascript de la imagen usando jQuery.

  • -1, no deshabilite el almacenamiento en caché en el encabezado de las imágenes. Eso obligará a que la imagen se descargue cada vez que se cargue la página.

    – Reactular

    13 mayo 2013 en 16:04

  • Esto hará que el navegador no almacene en caché el contenido de la página. El rendimiento caerá, pero no muy significativamente; sin embargo, si tiene muchas imágenes en la página, puede disminuir significativamente.

    – Christian Estuardo

    13 mayo 2013 en 16:04

  • @MathewFoscarini quiere que la imagen se descargue cada vez que se carga una página.

    – Christian Estuardo

    13 mayo 2013 en 16:04

  • Si solo desea usar javascript para actualizar la imagen, puede usar esto: stackoverflow.com/questions/2104949/…

    – Christian Estuardo

    13 mayo 2013 en 16:05

  • @ChristianStewart, no, él quiere que la imagen se descargue cuando se cambie.

    – Reactular

    13 mayo 2013 en 16:05


Esto funciono muy bien para mi:

image.jpg?=<?php echo rand() . "n";?>

1641756546 609 Imagen de actualizacion forzada de PHP
noamik

Puede reemplazar la imagen actual por una nueva usando JavaScript:

    <div id="imageHolder">this is where the image will show</div>
    <script type="text/javascript">
    function myfunction(){
    document.getElementById("imageHolder").innerHTML="<div id="imageHolder"><img src="https://stackoverflow.com/questions/16526363/imagefolder/imagename.jpg" alt=""/></div>";
    }</script>

Por supuesto, debe activar la función myfunction después de completar la carga …

.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad