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

您将需要两个部分来有效地执行此操作...在您显示的 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.php了解该strftime函数。

根据文件的存储方式,您可以更有效,fpassthru例如使用本地文件。Content-Length如果您可以在下载之前确定文件大小(即,它是您发送的静态内容),您可能还想发送标头。

于 2012-10-13T23:21:00.963 回答
3

我不建议在服务器端 (PHP) 使用睡眠或其他延迟。您可以使用某种 JavaScript 代码向用户显示所需的通知并将页面重定向到文件下载 URL(PHP 脚本)。在那里,您可以使用 Content-Disposition 标头来更改正在下载的文件的名称。

如有必要,可以使用 PHP 部分生成 JavaScript 代码以获取要重定向到的 URL。

于 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 回答