【问题标题】:Google Chrome Cache PDF files谷歌浏览器缓存 PDF 文件
【发布时间】:2013-10-14 01:04:43
【问题描述】:

我已经构建了一个小型 PHP/MySQL 内部应用程序来托管和排序文档。在更新文件(在本例中为 .PDF 文件)之前,一切正常。当用户更新 .PDF 时,新文件按预期在服务器上,旧版本被删除。用户正在获取新版本,前提是他们从未打开过旧版本。

现在的问题....版本实际上在服务器上。

我猜 Google Chrome 浏览器正在某处缓存旧版本的 PDF。我怎样才能解决这个问题?由于用户数量和每天更新的次数,一些文档要求用户手动清除任何缓存是不切实际的。

【问题讨论】:

    标签: php google-chrome caching pdf local-storage


    【解决方案1】:

    你真的有三个选择:

    1. 每次更新时更改文件名
    2. 始终使用 GET 参数生成 HREF
    3. 发送标头信息,告知浏览器始终从服务器下载新内容

    选项 1 - 适用于 100% 的情况。可能很难维护

    echo '<a href="files/pdfs/'.$row['FILENAME_FROM_DATABASE'].'">PDF</a>';
    
    // Could produce something like:
    // <a href="files/pdfs/filename_v5.pdf">PDF</a>
    

    选项 2 - 适用于 99% 的情况

    echo '<a href="files/pdfs/filename.pdf?q='.microtime(true).'">PDF</a>';
    

    选项 3 - 适用于 99% 的情况

    header("Pragma: public");
    header("Cache-Control: maxage=1"); // <-- important
    header('Expires: '.gmdate('D, d M Y H:i:s', time()+1).' GMT');
    header('Content-type: application/pdf');
    exit(file_get_contents(PATH_TO_PDF_FILE));
    

    【讨论】:

    • 我使用选项 2,但使用 time() 返回带有秒的 unix 时间戳。函数 microtime() 返回一个浮点数/字符串。在 url 中追加可能不太安全。
    【解决方案2】:

    在 HTML5 中,您可以强制浏览器 缓存某些域(或根本不缓存,或使用缓存(如果可用)等等) - 请参阅 https://developer.mozilla.org/en-US/docs/HTML/Using_the_application_cache

    将此添加到您的&lt;!doctype html&gt;&lt;head&gt; -section:

    <html manifest="my.cache">
    

    在您的文档根目录上创建一个文件 - my.cache - 包含以下内容:

    CACHE MANIFEST  
    CACHE  
    # dont force any caching 
    NETWORK:
    #force downloads form your site not to use cache
    your-site.com
    

    这会强制不缓存任何内容。

    如果您有 pdf 下载路径,请改用该路径(这样您网站上的其他文件(PDF 除外)将被缓存)

    在浏览器中试试这个。记得先清除缓存! :) 当您发现每个 PDF 都已下载时,无论文件名或标题如何。

    【讨论】:

      【解决方案3】:

      我将完成第三个选项,通过将动态参数附加到将下载文件的链接,即:

          <a href="http://host.com/my_file.pdf?t=<?php time(); ?>">My File</a>
      

      这应该绕过缓存。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-23
        • 2011-08-18
        • 2016-05-24
        • 2011-11-01
        • 2012-08-22
        • 2020-12-11
        • 2016-01-22
        相关资源
        最近更新 更多