PHP Caching не позволяет моему сайту показывать реальные файлы, а вместо этого показывает старые файлы.Я перепробовал все, и ничего не работает - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть php-сайт на localhost, и он всегда работал нормально, но теперь он показывает только старые css-файлы и старые js-файлы.Когда я редактирую файлы и обновляю страницу, ничего не меняется.

особенно файл макета CSS не хочет обновлять

Я использую: XAMPP и APACHE

Я прочитал многостатьи на stackoverflow об этой проблеме, но у меня ничего не работает, я попытался добавить:

<?php 

header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Content-Type: application/xml; charset=utf-8");

?>

Но это дало ошибку:

Эта страница содержит следующие ошибки: ошибкав строке 44 в столбце 8: несоответствие открывающего и завершающего тегов: строка ссылки 0 и заголовок Ниже приведено отображение страницы до первой ошибки.

, а затем она обрабатывает страницу как документ ипросто показывает простой текст.

Я пытался использовать файлы .htaccess, но они ничего не сделали ничего .

Я действительно не знаю, как с этим справиться, я могу 'я не могу продолжить на сайте, потому что он просто не хочет обновляться и застрял на старой странице.

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

РЕДАКТИРОВАТЬ:

Так что я исправилошибка, но она все еще не обновляется

Я изменил PHP на:

<?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");

?>

Так как он еще показал мою страницу как XML, но это все равно не обновляет макет.

Как я могу позволить моей странице автоматически перезагружать файлы, поэтому нет (CTRL + F5).

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Я делаю 3 вещи, чтобы убедиться, что динамические данные не кэшируются:

  1. Установка соответствующих заголовков ответа;
  2. Включение метатегов HTML;
  3. Добавитьвременная метка для URL ресурсов, которые могут измениться.

1.Установите соответствующие заголовки ответа

По существу, срок действия этих наборов заголовков в прошлом устанавливает множество директив, чтобы сервисы между вашим выходом PHP и конечным клиентом не изменяли или не кэшировали ваш источник.

Expires: Sat, 26 Jul 1997 05:00:00 GMT
Cache-Control: nocache, must-revalidate, no-store, max-age=0, private, max-stale=0, post-check=0, pre-check=0, no-transform
Pragma: no-cache

2.Включите метатеги HTML

Некоторые прокси-серверы и веб-клиент будут анализировать HTML (чего следует избегать в приведенной выше директиве «no-transform»).Поэтому добавление директив в вывод HTML еще больше снижает риск кэширования.

В этом html-фрагменте есть две спецификации «expires» - насколько я понял, некоторые веб-клиенты не будут анализировать дату.

<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Sat, 26 Jul 1997 05:00:00 GMT" />

3.Добавьте временную метку к URL-адресам ресурсов, которые могут измениться.

Статические ресурсы (или эквивалентные), такие как изображения, файлы CSS, а также файлы XML, текстовые файлы, шрифты и т. Д., Должны кэшироваться для повышения производительности, но вы все равно хотитечтобы избежать кэширования при их обновлении.

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

Вы можете заменить временную метку статическим «тегом», таким как «v1», «v2» и т. Д. Однако я предпочитаю вычисленную временную метку, поскольку мне больше не нужно думать об ее обновлении.На самом деле почти все мои ресурсы помечаются автоматически автоматически.

Вот пример PHP:

// This is a simple example, it must be adapted to your environment.
// * $initialUrl is a URL like "//mystyle.css" without any get parameter.
// * $resourceUrl is the (relative) server path to that resource
//                 which could be "/var/www/mysit/mystyle.css"
// * filemtime gets the timestamp of the resource.
// * baseconvert gets a shorter representation of that timestamp.
// * The timestamp is appended to the URL by simple concatenation here.
// * $url can then be used to generate the HTML (echo ".... $url ...";).
// * This can (should) be wrapped in a function.  Personally I have integrated
//   it in the MVC Framework I use in an output filter and in a utility
//   class method.
$url=$initialUrl.'?ts='.base_convert(filemtime($resourcePath),10, 36);

Примечание

Некоторые из директив могут быть избыточными, но этолучше быть избыточным, чем иметь конкретного пользователя, который испытывает проблемы.Вышесказанное является результатом фактического полевого опыта.Например, «no-transform» был добавлен после удаленной отладки среды пользователя, когда прокси-сервер его мобильного оператора вставлял ресурсы javascript и css прямо в HTML.Это было довольно неожиданно, и в то время это вызывало нежелательное поведение.

Возможности браузера также меняются со временем, и если у вас есть пользователи, которые все еще используют старые браузеры, некоторые не поймут некоторые директивы.

Поэтому я рекомендую играть безопасно и просто добавить как можно больше контрмер.

0 голосов
/ 25 ноября 2018

Эта ошибка должна возникать только в том случае, если тип документа вашей HTML-страницы - XHTML.Вы можете проверить это, взглянув на первую строку вашего документа, это объявляет тип документа XTHML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Это означает, что все HTML-теги должны быть закрыты должным образом, например,например,

<head>
    <title>my webpage</title>
    <link rel="stylesheet" type="text/css" href="mystyles.css"></link>
</head>

Обратите внимание на </link>, который я добавил в третью строку.Самый простой способ решить эту проблему - изменить тип документа на

<!DOCTYPE html>

. Это означает, что документ не должен быть правильно сформированным .

.В качестве альтернативы можно было бы закрыть все html-теги.

Я бы посоветовал вам попробовать это, и если проблемы с кешем не исчезли, приходите снова и просите об этом.


И не кэшируйте таблицу стилейfiles

Самый простой способ сделать это - просто добавить новый параметр (например,? ver с номером версии) в документ таблицы стилей всякий раз, когда вы изменяете что-то в своих стилях:

<link rel="stylesheet" type="text/css" href="mystyles.css?ver01"></link>

Это должно сделать, вам не нужно ничего менять с именем файла таблицы стилей.

Другой, более сложный способ - установить mod_expires и определить это в вашей конфигурации apache2:

ExpiresActive On
ExpiresDefault “access plus 10 days”
ExpiresByType text/css “access plus 1 second”

Надеюсь, это поможет!Если это произойдет, я буду признателен за принятие этого ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...