我想实现代码,以便当用户下载该文件时,应该更改该文件的名称
例如
$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
答案 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
中的文件名而不对其进行清理会带来巨大的安全问题。如果你这样做,你需要消毒它。