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