我目前正在为客户创建一个网站,主要涉及销售各种文件.这显然是一件非常普遍的事情,这让我觉得有点愚蠢,因为没有想到这样做的方法.
一旦购买完成,客户应该被带到包含下载链接的页面,以及接收包含下载链接的电子邮件和包含将为他们创建的帐户的信息的电子邮件(他们也将能够从他们的帐户的控制面板下载).我想弄清楚的是我如何隐藏/隐藏文件在我的服务器上的位置,这样一个购买它的人就不能简单地将直接链接复制并粘贴到其他地方的文件中.即使我下载文件的请求的格式为http://example.com/blah/download/454643,一个与文件的实际位置不对应的URL,我认为可能仍然可以在服务器上找到该文件?我真的不太了解权限如何在我的服务器上运行,这就是我问的原因.提前致谢 :)
您基本上不会向用户提供该文件的直接URL.基于服务器的权限与此无关.
假设您在/data/files/file.pdf中保存了所需的文件(从Web根目录中存储文件的良好做法).您可以为用户提供下载链接,其类似于/download.php?auth=32
当用户单击该链接时,download.php将检查会话/ cookie是否经过身份验证以及下载ID是否有效(如果您有基于时间的下载到期),则download.php将从其位置读取所需文件并发送它带有适当的标题以强制下载到浏览器.
将文件存储在Web根目录之外,但请确保存储它们的文件夹位于php.ini文件的"open_basedir"指令中,这样您就可以从PHP脚本访问它们.将它们存储在Web根目录之外意味着它们不会通过HTTP直接访问.
有一个PHP脚本,就像这些答案中列出的那些可以流式传输/读出文件的脚本.如果它是一个大文件,您可能需要更改"max_execution_time"以考虑脚本读取文件所需的额外时间.此脚本将允许您验证用户身份并检查他们是否已为该文件付费.
将.htacces放在文件夹中,该脚本将从该文件夹请求的文件重写为变量.这使得它看起来好像是直接访问文件而不是.就个人而言,我只会将单个脚本放在这个文件夹中,只是为了简单起见.所以:
http://www.yourdomain.com/files/expensive_song.mp3
实际上重写为:
http://www.yourdomain.com/files/download_file.php?filename=expensive_song.mp3
祝好运.