Заставлять браузер каждый раз ссылаться на новую копию PDF?

#html #url #href #page-refresh

#HTML #url #href #страница-обновить

Вопрос:

Допустим, у меня есть что-то вроде

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

schedule.pdf Файл часто меняется на серверной части, и я хочу, чтобы пользователь всегда получал самую последнюю копию.

Страница, на которой это находится, статична, поэтому добавление случайного?[somerandomnumber] указывать в конце URL-адреса невозможно, и в любом случае сама страница может быть кэширована в браузере, поэтому пользователь не обязательно увидит новую версию страницы со ссылкой на нее.

Есть ли что-нибудь, что я могу поместить в это заявление (или, по крайней мере, рядом, встроенное), что обеспечит загрузку свежей копии PDF?

Я имею дело с устаревшей CMS вне моего контроля, поэтому я не могу ничего вставить в мета-заголовок или даже испортить файлы CSS. Я ищу встроенное решение. Какую-нибудь специальную магию OnClick я могу добавить туда?

Кроме того, существует ли какой-либо независимый от браузера способ убедиться, что при вводе https://example.com/schedule.pdf в строку URL браузера будет получена самая последняя копия, даже если в локальном кэше браузера что-то есть прямо сейчас?

На самом деле у меня есть контроль над конфигурацией Apache на сервере, поэтому я мог бы внести общесистемные изменения.

PDF — это единственное, в чем я хочу убедиться, что он свежий. Я не пытаюсь убедиться, что каждый объект или страница не кэшированы, и я не пытаюсь принудительно загружать PDF-файл вместо просмотра в браузере. Я просто пытаюсь убедиться, что при нажатии на эту ссылку или вручную вводе URL-адреса файла вы получаете самую последнюю копию файла, даже если что-то находится в вашем локальном кэше браузера.

Ответ №1:

—— Полный код для автоматического обновления Ссылка для скачивания с PHP ——

—— Как создать новую / автоматически обновляемую ссылку для скачивания с помощью PHP ——

Создайте папку с именем «pdf_folder» в том же месте, что и этот php-файл, и установите в нее 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>
  

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

1. Спасибо за вашу помощь… просто пытаюсь выяснить фактическую реализацию здесь… Я бы поместил текст в whatever.php файл на сервере и использовать его в href вместо whatever.pdf, или я бы поместил туда всю <?PHP echo $PDF_FOR_DOWNLOAD_FILE_NAME; ? > информацию? Я спрашиваю, потому что CMS очень ограничительна, и я не уверен, что это позволит этому пройти. Он уже постоянно переформатирует мои поля и тому подобное. Использование статического имени файла и постоянная замена файла — это уже попытка взломать его. Даже для получения php на сервере может потребоваться хитрость.

2. Обновленный исходный ответ. пожалуйста, проверьте полный код.

3. Извините, я не хочу показаться грубым, у меня просто не было времени протестировать это соответствующим образом. Я ценю ваши усилия. Я думаю, что усилия, которые вы приложили к тому, чтобы сделать скрипт модульным и полезным для будущих пользователей Google по этому вопросу, усложнили для меня понимание. Когда у меня будет время по-настоящему изучить его, я уделю ему то внимание, которого он заслуживает. Я просто не хотел, чтобы вы чувствовали, что вас игнорируют. Ваша хорошая работа не пропадет даром, поскольку эти вопросы будут документироваться здесь в течение длительного времени. Еще раз спасибо, и я надеюсь скоро получить надлежащий ответ!

4. Хорошо, я все еще не понимаю, что вы пытаетесь сделать с этим кодом. Вы пытаетесь выбрать самый последний PDF-файл из списка PDF-файлов в заданной папке? Потому что это не то, что я пытаюсь сделать. У меня есть один файл, который всегда имеет одно и то же имя, но этот файл может измениться. Когда это изменится, большинство браузеров не будут автоматически перезагружать его. Я хочу, чтобы он перезагружался при каждом нажатии на него.

5. то, чего вы пытаетесь достичь, возможно просто с помощью htaccess, вы можете настроить кэширование файлов PDF на минуту, я думал, вы будете загружать новый файл каждый раз, когда вы обновляете pdf, мой код по-прежнему действителен для вас, потому что, даже если вы обновите то же имя файла, php обновит его для вас, потому что теперь это не зависит от какого-либо кэша, это зависит от хэша файла, который php обновит для вас, вы можете протестировать его, просто загрузите полный код, вставьте PDF-файл с заголовок «pdf 1», загрузите его, а затем вставьте другой PDF-файл с тем же именем, с другим заголовком, например «pdf