Я использую file_get_contents () для загрузки динамического изображения с внешнего веб-сайта.
Проблема в том, что изображение было обновлено на удаленном веб-сайте, но мой скрипт все еще отображает старое изображение. Я предполагаю, что сервер кэширует изображение где-то, но как я могу заставить сервер очистить кеш и использовать обновленное изображение при получении файла с файлом_get_contents?
На моей локальной машине мне пришлось сделать CTRL + F5, чтобы принудительно обновить изображение.
Я также попытался добавить кеш-заголовок к моему скрипту, но он не сработал:
$image = imagecreatefromstring(file_get_contents($path)); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé header('Content-type: image/png'); imagepng($image); exit();
Ваша проблема заключается в том, что вы используете внешний ресурс для загрузки вашего файла. Как только он был загружен – нет смысла отправлять некоторые заголовки вашему клиенту. Ваше изображение уже загружено (и это был кеш из внешнего ресурса).
Тем не менее, есть простой способ решить проблему. Предположим, вы используете что-то вроде http://domain.com/path/to/image
в своем $path
. Затем просто выполните:
$image = imagecreatefromstring(file_get_contents($path.'?'.mt_rand()));
– Идея состоит в том, чтобы добавить некоторое случайное значение в запрос GET и предотвратить его кэширование.