【问题标题】:How can I allow only privledged users to download a pdf with php?如何只允许特权用户使用 php 下载 pdf?
【发布时间】:2010-05-18 15:20:36
【问题描述】:

假设我的服务器上存储了一些 pdf 文件,我只想允许付费用户下载特定的 pdf。

举个例子,假设我有一堆电子书。用户能够下载电子书 A 的唯一方法是他的帐户包含该特定书籍的正确凭据。

最好的方法是什么?

非常感谢任何关于如何改进我的想法的想法/建议!

我目前的想法:

  • 用户下订单

  • 成功后,将创建一个新文件夹 由他们创建 /account_num/order_id/ 的副本 特定文件将存储在 这个目录

  • 让 php 生成一个 .htaccess 只允许从 url 访问 包含嵌入的随机哈希 进入它。
  • 用户能够 访问这个随机散列页面是如果 他们以正确的用户身份登录, 并且哈希与哈希匹配 存储在数据库中,否则 他们被重定向到主页。

【问题讨论】:

    标签: php .htaccess file-access


    【解决方案1】:

    将 PDF 存储在文档根目录下。当有人想下载 A.pdf 时,将他们定向到 PHP 页面,例如:download.php?file=A.pdf。编写该 download.php 页面以检查请求用户的权限,如果他们的权限足够好,则强制下载 A.pdf。

    【讨论】:

    【解决方案2】:

    1) 将 PDF 保存在文档根目录之外,这样任何人都无法通过浏览器直接访问它们

    2) 让 PHP 页面提供 PDF 文件,因此获取它们的唯一方法是成功登录并验证,并且每次下载都会强制执行

    通过 PHP 下载文件的代码(请务必清除输入):

    <?php
        $file_name = $_GET['filename']; // somefile.pdf
        $file = '/home/pathtofile/' . $file_name;
    
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . $file_name);
        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;
    ?>
    

    【讨论】:

      【解决方案3】:

      将 PDF 存储在文档根目录之外(如果由于一些蹩脚的托管设置而无法实现,请将它们存储在难以猜测的地方)。

      检查用户是否有权限,然后执行以下操作:

      <?PHP
      $pdf_path = '/some/dir/';
      header('Content-type: application/pdf');
      readfile($pdf_path . 'mydoc.pdf');
      

      您可能需要进一步调整标题,但这是基本想法。

      【讨论】:

        猜你喜欢
        • 2014-02-26
        • 1970-01-01
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        • 1970-01-01
        • 2020-04-01
        • 2020-06-07
        • 2010-10-15
        相关资源
        最近更新 更多