【问题标题】:Force a browser to link to a fresh copy of a pdf every time?每次都强制浏览器链接到新的 pdf 副本?
【发布时间】:2020-12-22 06:09:04
【问题描述】:

假设我有类似的东西

<a href="https://example.com/schedule.pdf">download me</a>

schedule.pdf 文件在后端经常更改,我希望用户始终获得最新的副本。

这个页面是静态的,所以在 URL 的末尾添加一个随机的 ?[somerandomnumber] 是不可行的,而且无论如何,页面本身可能会缓存在浏览器上,所以用户不会一定会看到带有链接的新版本页面。

我可以在该语句(或至少在附近,内联)中添加任何内容,以确保它下载 pdf 的新副本?

我正在处理我无法控制的过时 CMS,因此我无法将任何内容塞入元标题,甚至无法处理 CSS 文件。我正在寻找内联解决方案。有什么特殊的 OnClick 魔法我可以在那里使用吗?

此外,是否有任何与浏览器无关的方法来确保将 https://example.com/schedule.pdf 放入浏览器的 URL 栏中将获得最新的副本,即使本地浏览器缓存中现在有内容?

我确实可以控制服务器上的 Apache 配置,所以我可以进行系统范围的更改。

PDF 是我唯一要确保是新鲜的。我并不是要确保每个对象或页面都未缓存,也不是要强制下载 PDF 而不是在浏览器中查看。我只是想确保当您单击该链接或手动输入文件的 URL 时,您将获得该文件的最新副本,即使您的本地浏览器缓存中存在某些内容。

【问题讨论】:

    标签: html url href page-refresh


    【解决方案1】:

    ----- 使用 PHP 自动更新下载链接的完整代码-----

    ----- 如何使用 PHP 制作新鲜/自动更新的下载链接 -----

    在这个php文件的同一位置创建一个名为“pdf_folder”的文件夹,并在其中设置一个PDF文件,

    您可以从这里下载代码:https://eetsceeck.cf/pdf_script/

    这里是完整的代码:

    <?php
    
    
    // ============================================= LEAVE ME ALONE DONT TOUCH ME 
    // DEFINE DEFAULT VARY (AVOID UNDEFINE VARIABLES ERRORS)
    $PDF_FOR_DOWNLOAD_FILE_NAME = "";
    
    
    // DEFINE THE PATH OF THE PDF FOLDER
    //
    $PDF_Folder_location = "./pdf_folder/";
    // ============================================= LEAVE ME ALONE DONT TOUCH ME 
    
    
    
    
    // USE QUERY TO LOOK FOR THE LATEST FILE CREATED BY DATE AND TIME FUNCTION
    // AS WELL FETCH THE FILE NAME
    //
    FUNCTION Get_latest_file ($PDF_Folder_location) {
        
    
    // ARRANGE PDF IN ARRAY FOR SORTING
    
    $OPEN_dir = opendir($PDF_Folder_location); // = > PDF directory
    
    
    // WHILE LOOP - IF THERE ARE PDF'S GET THEM //=>
    // 
        WHILE (false !== ($PDF_file = readdir($OPEN_dir))) {
        if (strstr($PDF_file,".pdf"))
            
        // IF EXIST EXECUTE A LIST BY DATE/TIME - FETCH TO ARRAY ALL INFO DATE/TIME=>NAME
        // ARRAY
        $PDF_file_list[] = DATE("YmdHis ", FILEMTIME($PDF_Folder_location.$PDF_file)).$PDF_Folder_location.$PDF_file; 
    
    } // <= END OF WHILE LOOP
    
    // SORT RESULTS OF ARRAY
    //
    rsort($PDF_file_list);
    // 
    // END OF FETCH
    
    
    // DEFINE VARY FOR FILENAME ONLY TO BE EXECUTED AS LINK PATH TO FILE
    echo $PDF_FOR_DOWNLOAD_FILE_NAME = BASENAME($PDF_file_list[0]); // (USE ME FOR YOUR HTML LINK TO YOUR PDF DOWNLOAD BUTTON)
    
    } // END OF FUNCTION FOR LATEST PDF FILE
    
    ?>
    
    
    <!doctype html>
    <html lang="en">
    <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta charset="utf-8">
    <title>PDF file download</title>
    
    
    <style>
    html,
    body,
    #container {
       height: 100%;
       width: 100%;
    }
    body {
       background-color: #FFFFFF;
       color: #000000;
       font-family: Arial;
       font-size: 13px;
       font-weight: normal;
       line-height: 1.1875;
       margin: 0;
       overflow-x: hidden;
       overflow-y: hidden;
       padding: 0;
    }
    #PDF_file_download_btn {
       -webkit-appearance: none;
       background-color: #000000;
       background-image: none;
       border: 0px solid #2E6DA4;
       color: #FFFFFF;
       font-family: "Roboto Condensed";
       font-size: 21px;
       font-weight: normal;
       line-height: 60px;
       margin: 0;
       text-align: center;
       text-decoration: none;
       vertical-align: top;
    }
    #PDF_file_download_btn:hover {
       -moz-transition: background-color 100ms linear 0ms;
       -webkit-transition: background-color 100ms linear 0ms;
       background-color: #FF0000;
       transition: background-color 100ms linear 0ms;
    }
    #PDF_file_download_btn {
       -moz-transition: all 100ms linear 0ms;
       -webkit-transition: all 100ms linear 0ms;
       transition: all 100ms linear 0ms;
    }
    #container {
       background-color: #FBFBFB;
       background-image: none;
    }
    #container {
       height: 330px;
       left: 0px;
       overflow: hidden;
       position: absolute;
       text-align: center;
       top: 0px;
       width: 100%;
       z-index: 1;
    }
    #container_Container {
       margin-left: auto;
       margin-right: auto;
       position: relative;
       text-align: left;
       width: 800px;
    }
    #PDF_file_download_btn {
       height: 60px;
       left: 225px;
       position: absolute;
       top: 135px;
       width: 350px;
       z-index: 0;
    }
    a {
       color: #0000FF;
       text-decoration: underline;
    }
    a:visited {
       color: #800080;
    }
    a:active {
       color: #FF0000;
    }
    a:hover {
       color: #0000FF;
       text-decoration: underline;
    }
    input:focus,
    textarea:focus,
    select:focus {
       outline: none;
    }
    .visibility-hidden {
       visibility: hidden;
    }
    h1,
    .h1 {
       background-color: transparent;
       color: #000000;
       display: inline;
       font-family: Arial;
       font-size: 32px;
       font-weight: bold;
       margin: 0px 0px 0px 0px;
       padding: 0px 0px 0px 0px;
       text-decoration: none;
    }
    h2,
    .h2 {
       background-color: transparent;
       color: #000000;
       display: inline;
       font-family: Arial;
       font-size: 27px;
       font-weight: bold;
       margin: 0px 0px 0px 0px;
       padding: 0px 0px 0px 0px;
       text-decoration: none;
    }
    h3,
    .h3 {
       background-color: transparent;
       color: #000000;
       display: inline;
       font-family: Arial;
       font-size: 24px;
       font-weight: bold;
       margin: 0px 0px 0px 0px;
       padding: 0px 0px 0px 0px;
       text-decoration: none;
    }
    h4,
    .h4 {
       background-color: transparent;
       color: #000000;
       display: inline;
       font-family: Arial;
       font-size: 21px;
       font-style: italic;
       font-weight: bold;
       margin: 0px 0px 0px 0px;
       padding: 0px 0px 0px 0px;
       text-decoration: none;
    }
    h5,
    .h5 {
       background-color: transparent;
       color: #000000;
       display: inline;
       font-family: Arial;
       font-size: 19px;
       font-weight: bold;
       margin: 0px 0px 0px 0px;
       padding: 0px 0px 0px 0px;
       text-decoration: none;
    }
    h6,
    .h6 {
       background-color: transparent;
       color: #000000;
       display: inline;
       font-family: Arial;
       font-size: 16px;
       font-weight: bold;
       margin: 0px 0px 0px 0px;
       padding: 0px 0px 0px 0px;
       text-decoration: none;
    }
    .CustomStyle {
       background-color: transparent;
       color: #2E74B5;
       font-family: "Courier New";
       font-size: 16px;
       font-weight: bold;
       text-decoration: none;
    }
    </style>
    
    </head>
    <body>
       <div id="container">
          <div id="container_Container">
         
    
    
    
    
    
    <!-- i am here for test purposes only you can delete me no issue with that -->   
    <?php
    echo '<br>';
    echo '<br>';
    echo 'i am your newest pdf file and my name is:';
    echo '<br>';
    echo Get_latest_file($PDF_Folder_location); 
    ?>
    
    
    
    
    <br>
    <br>
    
    <!--                                            i am here to echo the whole 
                                                    function so your file name 
                                                    will be available to download 
                                                    so you cannot delete me, you need me!
    -->
    <a id="PDF_file_download_btn" href="./pdf_folder/<?php echo Get_latest_file($PDF_Folder_location); ?>" title="My dummy pdf file - download me">
    
    Dummy PDF file Download
    
    </a>
          </div>
       </div>
    </body>
    </html>
    

    【讨论】:

    • 感谢您的帮助...只是想弄清楚这里的实际实现...我将文本放在服务器上的whatever.php文件中并在href中使用它而不是不管是什么.pdf,还是我会把完整的&lt;?PHP echo $PDF_FOR_DOWNLOAD_FILE_NAME; ? &gt; 东西放在那里?我问是因为 CMS 非常严格,我不确定它会不会让它通过。它已经不断地重新格式化我的利润等。使用静态文件名并不断替换文件已经是试图打败它的一种技巧。即使在服务器上获取 php 也可能需要技巧。
    • 更新了原始答案。请检查完整的代码。
    • 对不起,我并不是要粗鲁,我只是没有时间适当地测试一下。我很感激你的努力。我认为您为使脚本模块化并对这个问题的未来 Google 员工有用而付出的努力使我理解起来更加复杂。当我有时间真正检查它时,我会给予它应有的关注。我只是不想让你觉得你被忽视了。你的好工作不会白费,因为这些问题会在这里记录很长时间。再次感谢,我希望尽快得到适当的回复!
    • 好的,我还是不明白你想用这段代码做什么。您是否尝试从给定文件夹中的 PDF 列表中选择最新的 PDF?因为那不是我想要做的。我有一个文件始终具有相同的名称,但该文件可能会更改。当它发生变化时,大多数浏览器不会自动重新加载它。我希望每次点击它时都重新加载它。
    • 您想要实现的目标只需使用 htaccess 即可,您可以将 pdf 文件配置为缓存一分钟,我以为您每次更新 pdf 时都会上传新文件,我的代码是仍然对您有效,因为即使您将更新相同的文件名,php 也会为您更新它,因为现在它不依赖于任何缓存,它取决于 php 将为您更新的文件哈希,您可以对其进行测试,只需下载完整的代码,插入一个标题为“pdf 1”的pdf文件,下载它,然后插入另一个同名的pdf文件,另一个标题例如“pdf
    猜你喜欢
    • 2011-07-30
    • 2011-12-01
    • 2012-01-11
    • 2018-08-24
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多