очистить кеш одного изображения

Рассмотрим минимальный пример: с помощью php у меня есть форма, в которую вы вводите текст, и создает изображение текста. Когда я меняю текст и обновляю, я не вижу нового изображения, потому что я предполагаю, что он кэшируется. Есть ли способ автоматически удалить этот один файл изображения из кеша, когда я его обновляю?

Это часто обрабатывается путем добавления случайной строки или метки времени в запрос.

т.е. <img src="/images/image.jpg?timestamp=1357571065" />

Типичным решением является то, что ceejazoz дал в этом ответе: дополнительная временная метка добавлена ​​как параметр запроса. Таким образом, URL-адрес каждый раз отличается, поэтому кэш или прокси не будет предоставлять кешированную версию.

Однако, хотя это работает, это уродливое обходное решение.

Чистым решением является указание заголовков при доставке изображения. Эти заголовки заботятся о том, чтобы изображение не кэшировалось. Вот для чего нужны заголовки: определение способов использования ресурсов. Недостаток: устаревшая конфигурация современных HTTP-серверов, используемых для доставки статических изображений, не предлагает указывать такие заголовки. Потому что в 99,99% всех случаев это бессмысленно. Поэтому вам придется написать собственный механизм. Не очень сложно, но, тем не менее, усилие. Использование вышеописанного решения, безусловно, проще и меньше хлопот.

И дать точный ответ на ваш реальный вопрос: очистка кеша от одного кэшированного объекта обычно невозможна. Хотя это действительно зависит от того, к какому типу вы говорите. Если это только кеш браузеров во время разработки (тестирования), просто сделайте «глубокую перезагрузку» (что-то вроде CTRL-SHIFT-R или CTRL-F5, в зависимости от вашего браузера). Но это очищает все кешированные объекты текущей страницы. Нет простого способа очистки кеша на стороне сервера или даже промежуточного прокси.

Добавьте строку запроса к изображению, возможно, содержащую юлианское время + случайное число, поэтому, например, ваш URL-адрес изображения будет выглядеть следующим образом: //…/myimage.jpg?112233445566-954967254

Вы можете повторно проверить header("Cache-Control: no-cache, must-revalidate"); кэша header("Cache-Control: no-cache, must-revalidate");