1

这对我来说似乎很奇怪。我有一个动态上传的文件目录,我需要先检查权限,然后用户才能打开该文件,所以我将 htaccess 添加到目录中:

RewriteEngine On
RewriteRule ^(.*)$ ../../get_file.php [QSA]

然后我在 php 中检查权限,如果用户有权限,我正在尝试为用户提供文件,如下所示:

//serve file back to user
$full_file_name = 'uploads/conversation_attachments/'.$file_name;
$filesize = filesize($full_file_name);
header("Content-length: ".$filesize);
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$full_file_name.";");
readfile($full_file_name);

它吐回'a'文件而不是'the'文件。因此,我没有使用 $file_name="rYMmfk3j9BSrjaRC.pdf" 获取文件“rYMmfk3j9BSrjaRC.pdf”,而是得到一个名为“uploads_conversation_attachments_rYMmfk3j9BSrjaRC.pdf”的文件。不知何故,它似​​乎用下划线代替了斜线。

有人知道为什么会这样吗?帮助将不胜感激!

4

1 回答 1

3
header("Content-Disposition: attachment; filename={$file_name};");
                                                  ^^^^^^^^^^^^

不要向客户端输出任何服务器端路径数据——这是无用的信息。服务器端路径极不可能存在于客户端上,浏览器无论如何也不会尊重它,否则恶意服务器可能会尝试在客户端计算机上的任意文件上乱写。

于 2012-07-17T14:38:26.713 回答