FAQ
Hola lista.
El caso es que estoy creando un sistema en el que los usuarios suben
imagenes y ejecutan filtros (con imagick) para cambiar la imagen.
Entonces la imagen se guarda en base de datos.
Después de esto, las imágenes se recuperan de la base de datos y se
muestran en tags de imagenes (como una galeria).
El problema viene cuando miro si las imagenes se van cacheando para no
tener que ir descargandolas cada vez cuando no han cambiado. En mi
sistema, esto es especialmente prioritario ya que por cada x mb que se
descargan, pago mas :(

El codigo que uso es mas o menos este:
header('Content-type: image/jpeg; charset=utf-8');
header('Content-Disposition: inline; filename="image1.jpg');
header('Expires: ' . gmdate("D, d M Y H:i:s", time() + 31536000) . '
GMT');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('ETag: "image1.jpg");
echo $content;
PD: para mirar si las imagenes se cachean uso firebug (extension de
firefox que supongo todos conoceran).

Search Discussions

  • Carlos Medina at Feb 3, 2009 at 9:53 am

    Javier Martinez Fernandez schrieb:
    Hola lista.
    El caso es que estoy creando un sistema en el que los usuarios suben
    imagenes y ejecutan filtros (con imagick) para cambiar la imagen.
    Entonces la imagen se guarda en base de datos.
    Después de esto, las imágenes se recuperan de la base de datos y se
    muestran en tags de imagenes (como una galeria).
    El problema viene cuando miro si las imagenes se van cacheando para no
    tener que ir descargandolas cada vez cuando no han cambiado. En mi
    sistema, esto es especialmente prioritario ya que por cada x mb que se
    descargan, pago mas :(

    El codigo que uso es mas o menos este:
    header('Content-type: image/jpeg; charset=utf-8');
    header('Content-Disposition: inline; filename="image1.jpg');
    header('Expires: ' . gmdate("D, d M Y H:i:s", time() + 31536000) . '
    GMT');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('ETag: "image1.jpg");
    echo $content;
    PD: para mirar si las imagenes se cachean uso firebug (extension de
    firefox que supongo todos conoceran).
    Hola Javier,
    hasta lo que he visto es que pones las cabeceras al mostrar (me imagino)
    la imagen o la galeria. Pero en ninguna parte veo que tipo de cache
    estas usando?. El Firebug lo conozco pero no tenia conocimiento de que
    hiciera un cache de los datos e imagenes. Donde quieres cachear la imagen?

    Saludos

    Carlos Medina
  • Antonio Galicia at Feb 3, 2009 at 6:51 pm

    On Mon, Feb 2, 2009 at 3:06 PM, Javier Martinez Fernandez wrote:

    El problema viene cuando miro si las imagenes se van cacheando para no tener
    que ir descargandolas cada vez cuando no han cambiado. En mi sistema, esto
    es especialmente prioritario ya que por cada x mb que se descargan, pago mas
    Me parece que no tienes claro como funciona el mecanismo de "cache"
    entre el servidor y el navegador. Cuando el navegador solicita un
    elemento (el que sea) envía, entre otras cosas, algo como esto:

    If-Modified-Since: Tue, 03 Feb 2009 17:46:55 GMT
    If-None-Match: "265cc-14bfd-41cba1c0"

    con lo que le dice al servidor que compare la fecha de la versión
    tiene almacenada en el cache. Si la fecha del archivo en el servidor
    es posterior a la marcada entonces este debe enviar la nueva versión
    pero si no entonces regresa una respuesta 304 que significa "Not
    Modified" lo que el navegador interpreta como "usa la del cache" y el
    archivo como tal no viaja.
    header('Content-type: image/jpeg; charset=utf-8');
    header('Content-Disposition: inline; filename="image1.jpg');
    header('Expires: ' . gmdate("D, d M Y H:i:s", time() + 31536000) . '
    GMT');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('ETag: "image1.jpg");
    echo $content;
    Aquí lo que haces es enviar *siempre* el archivo, esto lo haces tú y
    no el servidor. Si no quieres que viaje nuevamente tendrás que cambiar
    la manera en que estas "marcando" el cache, lo que envías en la
    cabecera, lo que recibes de esta y lo que respondes en consecuencia.
    PD: para mirar si las imagenes se cachean uso firebug (extension de firefox
    que supongo todos conoceran).
    Y yo te diría que para usar el cache debes atenerte a las
    especificaciones del HTTP que supondría todos conocen.

    --
    Saludos,
    PP

    Calvin Trillin - "Health food makes me sick."

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedFeb 2, '09 at 9:06p
activeFeb 3, '09 at 6:51p
posts3
users3
websitephp.net

People

Translate

site design / logo © 2022 Grokbase