下载时文件名已更改

时间:2012-04-25 07:09:25

标签: php file-upload

我想实现代码,以便当用户下载该文件时,应该更改该文件的名称

例如

$uploaddir="files/userid/";
$filename=rand(1000,9999).time().rand(1000,9999);
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile);

假设使用此代码文件上传,它将像这样

存储在服务器上

23451232325654.pdf

但对于用户,他/她将具有逻辑名称,例如learn_php.php

当用户想要下载此文件时,他/她将有此链接下载

www.example.com/files/userid/23451232325654.pdf

但是这个文件在下载为23451232325654.pdf时没有存储在用户的电脑上,但是我想把它存储为逻辑名,如上图所示 learn.php

1 个答案:

答案 0 :(得分:0)

你可以做到这一点没问题。您只需要一个首先发送正确标头的下载脚本。在这种情况下,标题应该是:

header('Content-Disposition: attachment; filename="learn_php.pdf"');

参见php docs中的示例1。

因此,不是直接链接到文件(例如:http://website.com/content/129312.pdf),而是链接到下载脚本(例如:http://website.com/download.php?file=129312.pdf)。

下载首先发送标题,然后发送文件内容。

关于安全性的强制性说明:直接使用$_GET中的文件名而不对其进行清理会带来巨大的安全问题。如果你这样做,你需要消毒它。