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

Статус
В этой теме нельзя размещать новые ответы.

yeaahhh

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

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

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


однло из решений - давать уникальное имя картинке ( каждый раз при загрузке) .... через метку времени или еще как-то это реалтизовать
 
А не меняя имени картинки, исправить не получится?
 
При обновлении аватара на сайте, фотка не меняется.
Подскажите, кто-нибудь, пожалуйста, решение данной проблемы? Заранее спасибо.
Нужно запретить кеширование картинки на стороне браузера
Сохраняем код в файл 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, соответственно, должны быть подключены.
 
можно просто отдавать браузеру разные урлы

например

PHP:
echo '<img src="http://ava.jpg?'.rand(1,1000).'" />';

т.е. урлы для браузера будут разные и кеширование не будет происходить ( вернее будет, но фотка будет обновляться )
 
можно просто отдавать браузеру разные урлы

например

PHP:
echo '<img src="http://ava.jpg?'.rand(1,1000).'" />';

т.е. урлы для браузера будут разные и кеширование не будет происходить ( вернее будет, но фотка будет обновляться )
Каждый раз менять тоже не хорошо, можно просто при смене менять урл...
 
так адрес картинки не меняется, просто браузеру отдаются "разные" за счет гет параметров урлы

сам адрес картинки не меняется
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху