4

我正在部署一个网站,用户可以从中购买 pdf。现在我正在寻找存储方式,pdfs以便只有在付款完成后才能下载。我遇到了一种方法,我可以将 pdf 存储到Mysql数据库中,并在所需凭据满足时生成它的路径。

有没有其他方法可以做到这一点,并且指向 pdf 文件的链接应该是动态的和加密的,以便无法预测到其他书籍的其他链接。

我使用的服务器端语言是PHP

4

3 回答 3

3
  1. 您需要将文件存储在您的网站根目录之外的某个位置,如 Dagon 所述。上传文件时,使用move_uploaded_file移动它。您可以将文件命名为任何您想要的名称(在操作系统限制内)并将真实名称保留在数据库中。
  2. 然后,当用户支付了书籍费用后,将用户支付的书籍添加到数据库中的表中。
  3. 为用户提供他已支付的所有书籍的列表,例如:/download/filename.pdf
  4. 如果您使用 /download/.* 重定向到 download.php 或控制器的 Apache(或其他 Web 服务器的等效项),请添加 mod_rewrite。
  5. 在下载页面上,检查用户是否已登录并有权访问该文件。如果没有,请重定向到该书的购买页面。
  6. 如果下载正常,请为您需要的http 状态设置标题:Content-Length、Content-Type、Date、Status (200),也许是 Content-Encoding。
  7. 使用readfile将文件输出给最终用户。
于 2013-09-28T10:48:54.047 回答
2

有没有其他方法可以做到这一点,并且指向 pdf 文件的链接应该是动态的和加密的,以便无法预测到其他书籍的其他链接。

  1. 最好的办法,是付款后生成文件的密钥。
  2. 创建一个像这样的页面 www.site.com/download.php?key=key (在这里你不需要有书的 id,因为通过钥匙你可以在数据库上检查客户购买的书是什么.
  3. 在download.php里面读取key,查询数据库找到哪个文件与key链接
  4. 读取文件,并将其发送给客户。也就是说,如果密钥有效,您将把 php 标头作为内容类型发送为 pdf,并且(php 代码)以二进制形式读取文件并将其发送到消息正文中。

我希望这段代码有帮助

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>
于 2013-09-28T11:22:44.627 回答
2

我会 :

  • 拒绝对文件的任何访问——即使用 .htaccess 文件(这样,没有人可以访问该文件)

  • 开发一个 PHP 脚本:

    • 接收文件标识符(例如文件名;或可以对应于文件的某些标识符)
    • 验证用户(使用一些登录名/密码字段),如果用户有效并且可以访问文件(这是如果不同的用户无权访问同一组文件),则根据存储在数据库中的数据,从您的 PHP 脚本中读取文件的内容,并将其发送给用户。

优点是您的 PHP 脚本可以访问数据库——这意味着它可以允许用户登录、注销,它可以使用会话,...

这是适合此问题的堆栈用户的另一个答案:为 PDF 创建安全文件托管服务器

于 2013-09-28T10:42:24.587 回答