html - ブラウザに毎回 PDF の新しいコピーへのリンクを強制しますか?

okwaves2024-01-24  5

次のようなものがあるとしましょう

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

schedule.pdf ファイルはバックエンドで頻繁に変更されるため、ユーザーが常に最新のコピーを取得できるようにしたいと考えています。

このページは静的であるため、URL の末尾にランダムな ?[somerandomnumber] を追加することは現実的ではありません。いずれの場合も、ページ自体がブラウザにキャッシュされる可能性があるため、ユーザーは必ず、リンクのある新しいバージョンのページが表示されます。

PDF の新しいコピーを確実にダウンロードできるように、そのステートメント (または少なくとも近くのインライン) に何か入れることはできますか?

私は自分の制御の範囲外にある時代遅れの CMS を扱っているため、メタ ヘッダーに何も押し込むことはできず、CSS ファイルをいじることさえできません。インラインソリューションを探しています。あらゆる種類の特別な OnClick マジック Iそこに投げてもいいですか?

さらに、ブラウザの URL バーに https://example.com/schedule.pdf を入力すると、現時点でローカル ブラウザのキャッシュに何かがある場合でも、最新のコピーを確実に取得できるようにする、ブラウザに依存しない方法はありますか? ?

実際にはサーバー上の Apache 構成を制御できるので、システム全体に変更を加えることができます。

PDF が最新であることを確認したい唯一のものです。すべてのオブジェクトやページがキャッシュされていないことを確認しようとしているわけではありません。また、PDF をブラウザ内で表示するのではなくダウンロードするよう強制しようとしているわけでもありません。ローカル ブラウザのキャッシュに何かがある場合でも、そのリンクをクリックするかファイルの URL を手動で入力したときに、ファイルの最新のコピーが取得されることを確認したいだけです。



------------------------

----- 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>

9

助けてくれてありがとう...ここで実際の実装を理解しようとしているだけです...サーバー上のsomething.phpファイルにテキストを置き、whatever.pdfの代わりにそれをhrefで使用します、それとも完全な <?PHP echo $PDF_FOR_DOWNLOAD_FILE_NAME; を入力しますか? ? >そこにあるもの? CMS は非常に制限が厳しく、それを通過できるかどうかわからないため、質問しました。すでにマージンなどを常に再フォーマットしています。静的なファイル名を使用し、ファイルを定期的に置き換えることは、すでにそれを破ろうとするハックです。サーバー上で php を取得する場合でも、コツが必要になる場合があります。

– トマトボット

2020 年 9 月 5 日 2:52

元の回答を更新しました。完全なコードを確認してください。

– eetsceeck

2020 年 9 月 8 日 16:33

申し訳ありませんが、失礼を言うつもりはありません。これを適切にテストする時間がなかっただけです。あなたの努力に感謝します。スクリプトをモジュール化して、この質問を検討する将来の Google 社員に役立つようにするためにあなたが注力したおかげで、私が理解するのがさらに複雑になったと思います。本格的に検討する時間ができたら、当然の注目を集めます。ただ、無視されたと感じてほしくなかったのです。これらの質問はここに長期間記録されるため、あなたのこれまでの取り組みが無駄になることはありません。改めて感謝いたします。すぐに適切な返答ができることを願っています。

– トマトボット

2020 年 9 月 9 日 16:43

わかりました。このコードで何をしようとしているのか、まだわかりません。特定のフォルダー内の PDF のリストから最新の PDF を選択しようとしていますか?それは私がやろうとしていることではないからです。常に同じ名前を持つ単一のファイルがありますが、そのファイルは変更される可能性があります。変更された場合、ほとんどのブラウザは自動的にそれをリロードしません。クリックするたびにリロードされるようにしたいです。

– トマトボット

2020 年 9 月 10 日 13:51

あなたが達成しようとしていることは、htaccess を使用するだけで可能です。PDF ファイルを 1 分間キャッシュするように設定できます。PDF を更新するたびに新しいファイルをアップロードすると思っていました。私のコードはまだ有効です。同じファイル名を更新する場合でも、php はそれを更新します。これはキャッシュに依存せず、PHP が更新するファイル ハッシュに依存します。テストして、完全なコードをダウンロードし、「pdf 1」というタイトルの PDF ファイルを挿入して、ダウンロードしてください。をクリックしてから、同じ名前の別の PDF を挿入します。たとえば、「pdf

」などの別のタイトルを付けます。 – eetsceeck

2020 年 9 月 11 日 8:48

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。