2010-03-25 119 views

回答

0

将实际文件存储在公共html区域之外,然后在PHP脚本中简单地发送适当的头文件(Content-Type,Content-Length,Content-Disposition),最后从文件私有位置读取文件。

+0

谢谢,读取public_html之外的文件的任何示例!? – 2010-03-25 09:02:33

1

在允许下载以确保它们不是来自另一个页面之前,您可能需要考虑检查$ _SERVER ['HTTP_REFERER']的值。

至于隐藏只是做它的形式

yoursite.com/download.php?file=filename 

然后在你的代码只是ReadFile的()在一个隐藏目录中的文件的内容 - 你可以拒​​绝使用的.htaccess的物理访问,如果你是真的很关心,或者你可以用a来启动目录名。这将再次停止外部访问。这并不是必须的,因为没有办法知道(或猜测)隐藏的目录名称。

作为一个备注,如果您正在进行任何数据库访问并提供大型文件供下载,您必须在readfile()之前关闭数据库连接,因为在整个持续时间内连接将被视为“打开”(即使它是十分钟的下载),在这种情况下很容易达到最大连接限制。

0

reko_t就在这里。

如果您的文档根目录是在/ var/www/mysite中,您可以使用像/ var/www/files这样的文件夹。这将使您的文件无法从网络访问。然后你必须在php中创建一个下载脚本。如果您需要使用相对路径($ filename = realpath(“../ files/$ fileid。$ fileext”);),则可以使用realpath生成绝对路径。

查看php.net的readfile文档中的用户注释,并查找函数readfile_chunked。我在我自己的代码中使用该函数。很有用。

0

您可以通过PHP将文件流式传输给最终用户。这将使它可以同时隐藏和保护您的文件。

看看php header page如果向下滚动,会有很多关于如何通过php流式传输文件的例子。他们大多数可以复制并投入使用。

1

一些防止盗链的方法我能想到(按照复杂度的增长顺序)。

  1. 检查$ _SERVER ['HTTP_REFERER'];如果它属于您的网站或它是空白的,请允许下载;如果它属于其他站点,则拒绝下载。

  2. 当用户访问列表并在下载脚本中阅读时,在会话中存储随机ID。

  3. 生成一个随机ID临时链接:/download-4Gaw4MWfTH6dB9UgKILSFc2UlnIPRhMv/12.zip

(我不知道你在你的例子是什么意思,但除去URL中的文件扩展名几乎不是安全措施。)