2

假设我的服务器上存储了一些 pdf 文件,我只想让付费的人有权下载特定的 pdf。

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

实现这一目标的最佳方法是什么?

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

我目前的想法:

  • 用户下订单

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

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

3 回答 3

4

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

于 2010-05-18T15:25:07.880 回答
4

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;
?>
于 2010-05-18T15:26:13.450 回答
1

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

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

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

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

于 2010-05-18T15:28:13.170 回答