更改文件名以便下载,并在点击或延迟后开始下载

时间:2012-10-13 21:28:24

标签: php download delay filenames

我正在寻找更改文件名-adds当前日期的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

请帮帮我。

3 个答案:

答案 0 :(得分: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;

当然,您需要提供获取文件内容的方法(只需从磁盘或可能的数据库中读取)以及确定文件名。要将时间用作文件名格式,请参阅strftime功能的http://us3.php.net/manual/en/function.strftime.php

根据文件的存储方式,您可以使用fpassthru作为本地文件,从而提高效率。如果您可以在下载之前确定文件大小(即它是您要发送的静态内容),也可以发送Content-Length标题。

答案 1 :(得分:3)

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

如果需要,可以使用PHP部分生成JavaScript代码,以便将URL重定向到。

答案 2 :(得分:1)

您可以尝试添加一些时间 - 日期变量,例如:

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

$timedt = time()+$delay;

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

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

即兴创作并添加一些功能以检查条件(if / else)时间日期,而不是设置睡眠。添加文件名以供下载。