Как перезагрузить фоновое изображение из css в php?

#php #html #css #browser #reload

#php #HTML #css #браузер #перезагрузить

Вопрос:

Я использую разделенный CSS для загрузки фонового изображения из моего локального файла. Утомительная вещь PHP не обновляет свой кеш после того, как я изменил файл. Для меня предоставление случайного числа фоновому URL также не работало.

 <!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1 width=device-width">
    <title>PHP-001</title>
    <link rel="stylesheet" href="./public/css/styles.css?v=<?php echo time(); ?>">
  </head>
  <body>
    <section>
      test
    </section>
  </body>
</html>

section {
  background: url("./public/images/bg1.jpg?v=002");
}
 

Итак, я передал <style> элемент непосредственно <head> элементу для принудительного обновления PHP . Это в основном работает, но оно не сохраняет изображение постоянно в файле браузера. После того, как я удалю <style> части, а затем попытаюсь загрузить изображение из CSS , оно снова не работает.

 <!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1 width=device-width">
    <title>PHP-001</title>
    <style media="screen">
      header {
        background: url("./public/images/section.png?v=<?php echo time(); ?>");
      }
    </style>
  </head>
  <body>
    <section>
      test
    </section>
  </body>
</html>
 

введите описание изображения здесь

Я хочу загрузить / перезагрузить свое фоновое изображение из CSS файла.

Какие-либо советы по решению проблемы?

Комментарии:

1. Похоже, ничто из этого не имеет никакого отношения к PHP, или, по крайней мере, не очевидно, почему это так. Что именно вы имеете в виду A tedious thing is PHP does not update its cache after I modified the file ? Вместо того, чтобы высказывать нам свои предположения относительно причины проблемы (без каких-либо четких доказательств), было бы гораздо полезнее рассказать нам, какое реальное поведение вы видите и почему это вызывает у вас проблему. FWIW PHP не кэширует ваши файлы CSS. Но веб-сервер может. Или браузер может. Или вы хотите сказать, что есть проблема с функцией time()? Все это немного неясно.

2. Как сказал АДисон, это вообще не PHP. Файлы CSS являются статическим содержимым и по умолчанию обслуживаются всеми HTTP-серверами с долговременными заголовками кэширования. Затем файлы кэшируются соответствующим образом, например, с помощью клиентских браузеров и промежуточных кэшей, например: CDN, прокси и т. Д. Все работает по назначению, за исключением того, что вы меняете содержимое файла без изменения имени файла. Вы можете добавить мусор в URL-адрес и таким образом нарушить кэширование, как предлагали другие, но основная причина заключается в том, что вы не меняете имя файла при изменении содержимого.

Ответ №1:

Во-первых, просто чтобы отметить, что PHP не выполняет никакого кэширования. Как указал @ADyson в комментарии, ваш сервер или ваш браузер могут кэшировать данные.

Проблема, которую вы выразили, по-видимому, заключается в том, что «где-то» фоновое изображение кэшируется и не обновляется при изменении изображения, поскольку URL-адрес остается неизменным.

Вы пробовали:

   <link rel="stylesheet" href="./public/css/styles.css?v=<?php echo time(); ?>">
 

но все, что это делает, это заставляет браузер (или кого бы то ни было) думать, что ему лучше перезагрузить styles.css и не использовать кэшированную версию (если она есть). Таким образом, обновление изображения, как вы заметили, не работает.

Но, когда вы попытались

 <style media="screen">
  header {
    background: url("./public/images/section.png?v=<?php echo time(); ?>");
  }
</style>
 

Вы получили новое изображение.

В первом случае, при загрузке из файла css, никто не сказал браузеру (или кому бы то ни было), что он не должен использовать изображение, которое он уже кэшировал, если оно у него есть. Он просматривает URL-адрес и обнаруживает, что он совпадает с тем, который у него уже есть, поэтому не беспокоится о его повторном получении.

Один из способов — продолжать, как вы делали во втором случае, поскольку это работает. Или переписать файл CSS с помощью чего-то случайного, например, вашего?v=something

Комментарии:

1. Это приведет к аннулированию кэша при каждом отдельном запросе, что не совсем идеально. Либо измените настройки вашего веб-сервера в отношении заголовков кэша, которые он устанавливает для статических файлов [обычно это «навсегда», потому что статические файлы статичны], либо сделайте все правильно и назовите свои статические файлы в соответствии с их содержимым, чтобы поведение кэша не имело значения.