【问题标题】:Change file name for download and start downloading it after click or delay更改要下载的文件名并在单击或延迟后开始下载
【发布时间】:2012-10-13 21:28:24
【问题描述】:

我正在寻找更改文件名的 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

请帮帮我。

【问题讨论】:

  • -adds current date 是什么意思??

标签: php download delay filenames


【解决方案1】:

您需要两个部分来有效地执行此操作...在您显示的 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 标头。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      $delay = 10; #delay of 10 seconds
      sleep($delay);
      
      $timedt = time()+$delay;
      
      $filename = 'downloaded-'.$timedt.'.pdf';
      
      header('Content-Disposition: attachment; filename="{$filename}"');
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-10
        • 1970-01-01
        • 2017-09-28
        • 1970-01-01
        相关资源
        最近更新 更多