【问题标题】:Access/Download server files, not in site root, with PHP使用 PHP 访问/下载服务器文件,而不是在站点根目录中
【发布时间】:2010-04-05 23:08:42
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: php file-get-contents


    【解决方案1】:

    PHP 手册通过readfile function's page 上的示例很好地了解了如何实现这一点:

    <?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 也允许你做同样的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      相关资源
      最近更新 更多