如何通过PHP安全地存储/提供文件在Web服务器上只能通过安全登录区域访问?

时间:2012-07-12 11:32:46

标签: php http-headers data-storage

我目前正在创建一个PHP网站,允许管理员上传各种文档(pdf,doc,docx,xl​​s),然后可以在以后下载。管理员只有在登录后才能访问这些内容。到目前为止,我已经将文件存储在Web根目录上,然后使用PHP通过PHP脚本访问和提供文件,从而阻止直接访问文件。这确实有效,但似乎永远不是一个理想的方法,因为它依赖于通过PHP为文件下载设置正确的标题,这并不总是在所有浏览器上给出正确的结果。我无法真正看到任何其他方式,如果他们知道文件位于何处,也会阻止文件公开访问。

您通常会使用哪个流程来存储和提供不应公开访问的Web服务器上的文件?

1 个答案:

答案 0 :(得分:2)

示例PHP:

<?php
    if (TRUE === $_SESSION['logged_in']) {

    }

    $file = '/full/path/to/useruploads/secret.pdf';

    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;
?>