我正在寻找更改文件名-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
请帮帮我。
答案 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)时间日期,而不是设置睡眠。添加文件名以供下载。