У меня есть веб-камера, которая каждые 15 минут загружает изображение в папку на моем веб-сервере. И затем у меня есть страница WordPress, на которой отображается это изображение.
Проблема в том, что браузер кэширует изображение и не обновляется, когда я обновляю страницу через 15 минут.
Я пробовал разные варианты, такие как функция wp_get_nocache_headers(), img.decoding = "async"; и некоторые META-методы без кэширования, но ничего не работает.
С вероятностью 99% я делаю это неправильно!
Может ли кто-нибудь дать мне пошаговое руководство, как предотвратить кеш браузера на изображении с веб-камеры? И только одна страница с изображением.
Самый простой способ — просто добавить очистку кеша в URL-адрес изображения. Например, вы можете добавить дату/время изменения файла в строку запроса. В качестве альтернативы вы также можете просто добавить случайную строку к URL-адресу в QS, хотя это может привести к некоторым проблемам с производительностью в зависимости от трафика вашего сайта.
Пробовали ли вы установить заголовок ответа cache-control: no-cache в настройках веб-сервера? Вероятно, вы можете заставить его отправлять это специально для этого URL-адреса. Я сомневаюсь, что что-либо в PHP сработает - если URL-адрес указывает непосредственно на файл изображения, то PHP не участвует в его обслуживании, а ваш веб-сервер.






Предположим, у вас есть путь к изображению, например
my/path/to/the/image.jpg
и когда браузер загружает это, он кэширует его, то есть сохраняет локально, чтобы изображение не запрашивалось снова, пока не пройдет жизненный цикл кэша. И, конечно же, вы не можете контролировать кэш браузера ваших пользователей.
Но если вместо этого у вас есть что-то вроде этого:
my/path/to/the/image.jpg?v=123
тогда тот, кто загрузил это изображение без параметра v, равного 123, браузер фактически получит изображение. Таким образом, вы можете связать временную метку с загрузкой вашего изображения и добавить ее в качестве параметра, например
t=<the timestamp>
где «метка времени», конечно, является числом, и вы меняете это число всякий раз, когда переопределяете изображение, поэтому вы разрешаете браузеру ваших пользователей кэшировать изображение, но при следующей загрузке отметка времени будет отличаться от той, которая была ранее Used фактически заставит браузер вашего пользователя получить изображение и не полагаться на кеш, когда изображение должно быть переопределено.
Спасибо за ответ. Но есть ли у вас точный пример, который я могу использовать? Я не программист, поэтому мне нужен точный код и где именно его вставить :-)
@RobinAndersen У меня нет примера, но я применил эту идею примерно 10 раз. Если вам нужны более точные идеи, больше кодовых утверждений, это хорошо. Но затем я прошу вас отредактировать ваш вопрос и показать код, в котором отображается ваше изображение, а также некоторый контекст, например код вокруг него, имя файла и т. д.
Привет! Ниже я разместил ответ с описанием того, что я пробовал, и URL-адресом сайта. Может быть, это поможет? Спасибо
@RobinAndersen, спасибо. Но это больше похоже на редактирование вашего вопроса, чем на ответ. Вы можете нажать кнопку редактирования вашего вопроса и добавить в него дополнительную информацию. Кроме того, вы сказали, что пробовали image.jpg?nocache=<?php echo time(); ?>, и это не сработало. Можете ли вы рассказать мне, как это не сработало? Можете ли вы показать больше кода вокруг него? Что случилось? Вам было показано кэшированное изображение?
Это html: <img decoding = "async" src = "visitbudor.no/webcam/webcam2/Skitrekk.jpg?nocache=<?php echo time(); ?>" " = "" alt = " "> И это обслуживает только кэшированное изображение. Если я обновлю свой браузер, я получу то же самое «старое» изображение. Если я очистю кеш браузера, я получу новое и обновленное изображение. Но, возможно, я что-то упускаю из виду? Есть ли что-то еще код, который я также должен где-то реализовать?
@RobinAndersen, если вы щелкните правой кнопкой мыши свое изображение в браузере, что вы увидите в качестве его источника?
Источник: src = "visitbudor.no/webcam/webcam2/Skitrekk.jpg?nocache=<?php echo time(); ?>" " = "" alt = "">
@RobinAndersen, что src мог бы выглядеть хорошо, если бы он анализировался PHP. Но он не анализируется PHP. Вместо этого он записывается в ваш HTML как необработанное значение HTML. В исходном коде вашей страницы должно получиться что-то вроде src = "visitbudor.no/webcam/webcam2/Skitrekk.jpg?nocache=368483". Кроме того, вы также можете проверить странный " = "" сразу после значения src.
Спасибо, что указали мне в правильном направлении. Я наконец-то заставил его работать.
@RobinAndersen рад помочь. Если этот ответ решил вашу проблему, вы можете принять его как правильный ответ.
Вы должны дать нам что-то для работы, немного кода. Как сейчас выглядит код вашей страницы? Хотите автоматически просматривать новейшее изображение? Как нам его получить?