我需要在我的网站上创建一个下载部分,但正如我所关注的,我希望我的用户只能下载带有间接链接的文件,以防止他们在我的服务器上共享我的文件
如:
http://mysite.com/download/12.zip
到
有没有办法在PHP中这样做?
答案 0 :(得分:1)
您可能需要在允许下载之前检查$ _SERVER ['HTTP_REFERER']的值,以确保它们不是来自其他页面。
至于隐藏只是以表格
进行yoursite.com/download.php?file=filename
然后在你的代码中只是readfile()隐藏目录中文件的内容 - 你可以拒绝使用.htaccess进行物理访问,如果你真的担心,或者你可以用a启动目录名。这将再次阻止外部访问。但这并不是必要的,因为无法知道(或猜测)隐藏的目录名称。
作为旁注,如果您正在进行任何数据库访问并提供大型文件供下载,则必须在readfile()之前关闭数据库连接,因为连接在整个持续时间内将被视为“打开”(即使它是下载10分钟)在这种情况下很容易达到最大连接限制。
答案 1 :(得分:1)
我可以想到一些防止热链接的方法(日益增加的复杂性顺序)。
检查$ _SERVER ['HTTP_REFERER'];如果它属于您的网站或它是空白的,请允许下载;如果它属于其他网站,请拒绝下载。
当用户访问商家信息时,在会话中存储随机ID,并通过下载脚本阅读。
使用随机ID生成临时链接:/download-4Gaw4MWfTH6dB9UgKILSFc2UlnIPRhMv/12.zip
(我不确定您在示例中的含义,但从URL中删除文件扩展名几乎不是安全措施。)
答案 2 :(得分:0)
将实际文件存储在公共html区域之外,然后在PHP脚本中只需从私有位置发送相应的标题(Content-Type,Content-Length,Content-Disposition),最后readfile()文件。
答案 3 :(得分:0)
reko_t就在这里。
如果你的文档根目录是/ var / www / mysite,你可以使用像/ var / www / files这样的文件夹。这将使您的文件无法通过Web访问。然后你必须在PHP中创建一个下载脚本。如果需要使用相对路径,则可以使用realpath生成绝对路径($ filename = realpath(“../ files / $ fileid。$ fileext”);)。
在php.net上的readfile文档中查看用户注释,并查找函数readfile_chunked。我在自己的代码中使用该函数。非常有用。
答案 4 :(得分:0)
您可以通过php将文件流式传输给最终用户。这样就可以同时隐藏和保护您的文件。
看一下php header page,如果向下滚动,将会有很多关于如何通过php流式传输文件的例子。其中大部分都可以复制并投入使用。