1

通常我会为我的朋友或家人保存文档(图像、mpeg、excel、word 文档等)在我网站的根目录中,在名为 /files/ 或类似的目录中。没有什么不寻常的。

但是,我一直在玩用户会话控制,并允许用户将文件上传到专用的 /files/ 目录。(文件名保存在数据库中,带有该用户的 ID)

但是,这意味着其他人可以尝试猜测和定位其他人的文件。
我会在上传时随机化文件名。我阻止 apache 显示 /files/ 目录内容。

但是,我想开始将文件保存在网站根目录之外。这样就无法通过浏览器访问。

我没有要显示的代码,但如果无法完成,我什至不想开始这项工作。我确实找到了这个片段,它显示了如何从您的网站根目录之外显示图像:

也许我可以将它用于任何文件类型,但是有没有人听说过一种更好的方法来允许用户(登录)从在线访问他们的文件,但不让其他用户具有类似的访问权限?

4

1 回答 1

1

readfilePHP 手册通过函数页面上的示例很好地了解了如何实现这一点:

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

这会通过设置 content-disposition 和 content-type 标头来强制下载任何文件。这几乎就是这种事情通常完成的方式,file_get_contents也允许你做同样的事情。

于 2010-04-05T23:21:36.643 回答