Как предотвратить кэш браузера для php сайта
У меня есть php-сайт, работающий на облачном сервере.Когда я добавляю новые файлы css, js или изображения, браузер загружает те же старые файлы js, css и изображений, хранящиеся в кэше.
мой сайт имеет doctype и мета-тег, как показано ниже
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0)">
<meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0)">
<meta http-equiv="Site-Enter" content="blendTrans(Duration=1.0)">
<meta http-equiv="Site-Exit" content="blendTrans(Duration=1.0)">
из-за вышеуказанного doctype и meta кода я загружаю те же файлы, кэшированные в браузере, а не новый
5 ответов:
попробуй такое
<?php header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); ?>
здесь, Если вы хотите управлять им через HTML: сделайте как ниже Вариант 1:
<meta http-equiv="expires" content="Sun, 01 Jan 2014 00:00:00 GMT"/> <meta http-equiv="pragma" content="no-cache" />
и если вы хотите управлять им через PHP: сделайте это, как показано ниже Вариант 2:
header('Expires: Sun, 01 Jan 2014 00:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', FALSE); header('Pragma: no-cache');
и 2 всегда лучше, чтобы избежать проблемы кэширования на основе прокси.
вы можете попробовать это:
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Connection: close");
надеюсь, это поможет предотвратить кэш, если таковые имеются!
у меня была проблема с кэшированием моих css-файлов. Установка заголовков в PHP не помогла мне (возможно, потому, что заголовки должны быть установлены в файле таблицы стилей вместо ссылки на страницу?).
Я нашел решение на этой странице:https://css-tricks.com/can-we-prevent-css-caching/
решение:
добавить метку времени в качестве части запроса URI для связанного файла.
(Смогите быть использовано для css, js, изображения etc.)развитие:
<link rel="stylesheet" href="style.css?<?php echo date('Y-m-d_H:i:s'); ?>">
для производства (где кэширование в основном хорошо):
<link rel="stylesheet" type="text/css" href="style.css?version=3.2">
(и переписать вручную, когда это требуется)или сочетание этих двух:
<?php define( "DEBUGGING", true ); // or false in production enviroment ?> <!-- ... --> <link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo (DEBUGGING) ? date('_Y-m-d_H:i:s') : ""; ?>">
EDIT:
или красивое сочетание этих двух:
<?php // Init define( "DEBUGGING", true ); // or false in production enviroment // Functions function get_cache_prevent_string( $always = false ) { return (DEBUGGING || $always) ? date('_Y-m-d_H:i:s') : ""; } ?> <!-- ... --> <link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo get_cache_prevent_string(); ?>">
запретить кэш браузера не очень хорошая идея в зависимости от случая. В поисках решения я нашел такие решения:
<link rel="stylesheet" type="text/css" href="meu.css?v=<?=filemtime($file);?>">
проблема здесь заключается в том, что если файл перезаписывается во время обновления на сервере, что является моим сценарием, кэш игнорируется, потому что временная метка изменяется, даже содержимое файла одинаково.
Я использую это решение, чтобы заставить браузер загружать активы только в том случае, если его содержимое изменено:
<link rel="stylesheet" type="text/css" href="meu.css?v=<?=hash_file('md5', $file);?>">