Предотвращение кэширования встроенного PDF - PullRequest
2 голосов
/ 17 января 2011

Я пытаюсь предотвратить кэширование встроенного файла PDF, используя следующий код (адаптированный из помощника загрузки CodeIgniter ):

if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
    header('Content-Type: application/pdf');
    header('Content-Disposition: inline; filename="'.$this->folder_name($report['Report_Name']).'.pdf"');
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Content-Transfer-Encoding: binary');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file . ".pdf"));
}
else {
    header('Content-Type: application/pdf');
    header('Content-Disposition: inline; filename="'.$this->folder_name($report['Report_Name']).'.pdf"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT');
    header('Pragma: no-cache');
    header('Content-Length: ' . filesize($file . ".pdf"));
}

readfile($file . ".pdf");
exit();

Может кто-нибудь определить, могут ли эти заголовки вызвать какие-либопроблемы в IE или любом браузере, например конфликты?

Ответы [ 2 ]

7 голосов
/ 17 января 2011

Чтобы предотвратить кеширование динамического контента, все, что я использую, это (и я еще не заметил никаких проблем с кешированием):

header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1
header('Pragma: no-cache'); // HTTP 1.0
header('Expires: 0'); // Proxies

Это (надеюсь) PHP-эквивалент того, что мои приложения Javause - извиняюсь за любые ошибки перевода.

0 голосов
/ 17 января 2011

В предоставленной вами ссылке помощника по загрузке CodeIgniter отсутствует код, в который вы, вероятно, скопировали фрагмент кода в вопросе. Я не уверен, почему вам нужен отдельный набор заголовков для IE. Но похоже на параметр заголовка Cache-Control, вам нужно установить значение no-cache . must-revalidate для клиентского приложения, чтобы кэшировать файл, но проверить его перед отображением / использованием. Это одна ссылка, которую я нашел, которая должна работать и на PHP: http://blog.serendeputy.com/posts/how-to-prevent-browsers-from-caching-a-page-in-rails/

...