Guzei.com

Отмена кэширования загруженного поверх старого изображения (фотографии)

Как увидеть изображение только что загруженное поверх другого.

Статьи

© 2007-01-08, Игорь Гузей (Guzei.com)

Проблема

Сделал анкету, где можно загружать фотографию. Загрузил, посмотрел, захотел загрузить другую. Загрузил, но вижу предыдущую.

Решение

С помощью PHP добавляем случайный параметр к имени фотогрфии и гарантированно видим только что загруженную.

1. Сбрасываем кэш полностью:                  echo '<img src="img.jpg?'.time().'">';
2. Сбрасываем кэш полько при изменении файла: echo '<img src="img.jpg?'.filemtime('img.jpg').'">';

т.е. добавляем парамерт сбрасывающий кэш только в случае изменеия файла. Таким образом кэширование продолжает работать.

Тернии

После загрузки новой фотографии поверх старой не помогает ничего. Ни обновление страницы, ни постановка тэгов ответственных за кэш, ни прописывание php-заголовков типа:

 header("Cache-Control: no-cache, must-revalidate");
 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

которые рекомендованы в PHP-документации.
При обновлении страницы через несколько минут новая фотография появляется сама собой, но сразу же после загрузки увидеть то, что загрузилось получилось только способом указанным в решении.