3

ファイル名を変更するphpコードを探しています-現在の日付を追加し、遅延してファイルのダウンロードを開始します。ダウンロードが開始されない場合は、リンクをクリックして日付を追加したファイルをダウンロードするオプションがあります。

次のように: しばらくするとダウンロードが開始されます... 何も起こらない場合は、 をクリックします<a href="">here</a>

私はこれだけを見つけました:

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('plik.pdf');

https://stackoverflow.com/a/6694505

私を助けてください。

4

3 に答える 3

5

これを効果的に行うには 2 つの部分が必要です... 表示された PHP ファイル ( と呼びましょdownload.phpう) で、顧客をゼロにカウントダウンする Javascript 関数を開始する必要があります。ゼロになると、実際のダウンロード場所にリダイレクトされます ( と呼びましょうrealdl.php)。このファイルは実際にファイルの内容を取得し、リダイレクトまたはクリックされたときにユーザーに送信します。

で必要な要素を次に示しますdownload.php

<? $file_dl_url = "/realdl.php?id=FILEID"; ?>

<script language="javascript">
  var elapsed = 0;
  function countdown {
    // see if 5 seconds have passed
    if (elapsed >= 5) {
      window.location = <?= $file_dl_url ?>;
    } else {
      // update countdown display & wait another second
      elapsed++;
      setTimeout("countdown", 1000);
    }
  }
  setTimeout("countdown", 1000);
</script>

<a href="<?= $file_dl_url ?>">Click Here</a>

次に、必要なのrealdl.phpは次のとおりです。

$file_contents = load_file_from_id($_GET['id']);
$file_name = determine_filename();

header("Content-Disposition: attachment; filename=$file_name");

echo $file_contents;

もちろん、ファイルの内容を取得する方法 (ディスクまたはデータベースから読み取る方法) と、ファイル名を特定する方法を提供する必要があります。時間をファイル名形式として使用するには、関数についてhttp://us3.php.net/manual/en/function.strftime.phpstrftimeを参照してください。

ファイルの保存方法によってはfpassthru、例としてローカル ファイルを使用すると、より効果的になります。Content-Lengthダウンロード前にファイル サイズを判断できる場合 (つまり、送信するコンテンツが静的な場合) は、ヘッダーを送信することもできます。

于 2012-10-13T23:21:00.963 に答える
3

サーバー側(PHP)でスリープやその他の遅延を使用することはお勧めしません。目的の通知をユーザーに表示し、ページをファイルダウンロードURL(PHPスクリプト)にリダイレクトする、ある種のJavaScriptコードを使用できます。そこで、Content-Dispositionヘッダーを使用して、ダウンロードするファイルの名前を変更できます。

リダイレクト先のURLを取得するために必要な場合は、JavaScriptコードをPHPで部分的に生成できます。

于 2012-10-13T22:50:27.293 に答える
1

次のような日時変数を追加してみてください。

$delay = 10; #delay of 10 seconds
sleep($delay);

$timedt = time()+$delay;

$filename = 'downloaded-'.$timedt.'.pdf';

header('Content-Disposition: attachment; filename="{$filename}"');

スリープを設定するよりも、条件付き (if/else) 日時チェッカーをチェックするためのいくつかの機能を即興で追加します。ダウンロード用のファイル名を追加します。

于 2012-10-13T22:10:38.967 に答える