Файл кэширования сайта, нужно это остановить

#php #apache #caching

#php #apache #кэширование

Вопрос:

У меня есть скрипт, который генерирует новый CSV-файл (в моем веб-каталоге) каждые полчаса, он заменяет исходный и помещает на его место новый с тем же именем файла, на который ссылается файл на моем веб-сайте.

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

Моей первой мыслью было убедиться, что скрипт все еще работает правильно, и после тестирования я могу подтвердить, что это так.

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

Я запускаю это с облачного сервера rackspace под управлением ubuntu и apache. Я предполагаю, что есть некоторые настройки, которые мне нужно перенастроить, чтобы решить эту проблему. Не мог бы кто-нибудь указать мне правильное направление.

Заранее спасибо.

Ответ №1:

Несколько грязное решение — добавить к скрипту, который позволяет загружать файл, случайное число (или, возможно, временную метку) в качестве параметра для предотвращения кэширования.

Например:

www.example.com/download.php?file=my.csvamp;rand=123456789

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

1. К вашему сведению, точно такой же трюк используется при отладке приложений Silverlight (браузер кэширует исполняемые файлы Silverlight).

2. В настоящее время я ссылаюсь на файл напрямую, например: www.example.com/my.csv Могу ли я заставить это работать по-прежнему?

3. Вот что я пробовал, и это не работает, что я сделал не так? echo «<a href=»Summary.csvamp;time=» . time() . «»>Загрузить CSV-версию</a> amp; nbsp;»;

4. @jimstandard Вы должны написать echo «<a href=»Summary.csv?time=» . time() . «»>Загрузить версию CSV</a> Обратите внимание на? вместо amp; .

Ответ №2:

Второй пример на этой странице показывает, как отключить кэширование на многих клиентах и прокси. Вы должны использовать что-то вроде этого.

 <?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
  

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