Очистка кеша при обновлении картинки

Тема в разделе "PHP", создана пользователем yeaahhh, 6 дек 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Друзья. Встретился со следующей проблемой:
    При обновлении аватара на сайте, фотка не меняется.
    алгоритм смены авы таков:

    имеется изображение под названием 11.jpg ->>
    данное изображение удаляется с сервера ->>
    на сервер закачивается новое изображение с названием 11.jpg..

    В итоге фотка остаётся неизменной. Она меняется только лишь после закрытия\открытия браузера.
    Подскажите, кто-нибудь, пожалуйста, решение данной проблемы? Заранее спасибо.
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    кэширует картинку не сервер а браузер


    однло из решений - давать уникальное имя картинке ( каждый раз при загрузке) .... через метку времени или еще как-то это реалтизовать
     
  3. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    А не меняя имени картинки, исправить не получится?
     
  4. B0nuse

    B0nuse Постоялец

    Регистр.:
    6 июн 2009
    Сообщения:
    105
    Симпатии:
    21
    Нужно запретить кеширование картинки на стороне браузера
    Сохраняем код в файл img.php
    PHP:
    <?
    $jpg_name=$_GET['img']; # название картинки из строки браузера
    //$jpg_name=""; # или задаем жестко название картинки
    header("Expires: Fri, 1 Jan 2010 10: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");
    header("Content-type: image/jpg".chr(10).chr(10));
    // проверяем есть ли файл картинки или выдаем по-умолчанию
    if (file_exists($jpg_name.".jpg")) {
    $img $jpg_name.".jpg";
    }else{
    $img "noimg.jpg";
    }
    // выводим картинку
    $im imagecreatefrompng($img);
    imagejpeg($im);
    imagedestroy ($im);
    ?>
    Картинку вызываем
    Код:
    /img.php?img=11
    Или делаем реврайт через .htaccess
    Код:
    RewriteEngine On
    RewriteBase /
    RewriteRule ^img/(.*).jpg$ img.php?img=$1 [NC]
    Или еще проще.
    Кладем файл .htaccess в папку с картинками
    Код:
    # Заголовок Cache-Control
    <IfModule mod_headers.c>
    Header  append Cache-Control "no-store, no-cache, must-revalidate"
    </IfModule>
    # Заголовок Expires
    <IfModule mod_expires.c>
    ExpiresActive  On
    ExpiresDefault  "now"
    </IfModule>
    Модули mod_headers.c и mod_expires.c, соответственно, должны быть подключены.
     
  5. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    можно просто отдавать браузеру разные урлы

    например

    PHP:
    echo '<img src="http://ava.jpg?'.rand(1,1000).'" />';
    т.е. урлы для браузера будут разные и кеширование не будет происходить ( вернее будет, но фотка будет обновляться )
     
    yeaahhh нравится это.
  6. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Каждый раз менять тоже не хорошо, можно просто при смене менять урл...
     
  7. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    так адрес картинки не меняется, просто браузеру отдаются "разные" за счет гет параметров урлы

    сам адрес картинки не меняется
     
Статус темы:
Закрыта.