我有一个带有文件下载选项的网站。然而,不是每个人都可以下载每个文件。例如,如果我以管理员身份登录,我可以下载所有文件,但如果我以客户身份登录,我只能下载某些文件。使用Apache和PHP的选择性文件下载权限
目前,所有这些文件都存储在Web根目录之外的目录中,因此用户不能手动下载。我制作了一个PHP脚本来管理文件的下载,但它非常麻烦。我试过几件事情:
1:
echo file_get_contents($file);
2:
readfile($file);
3:
if (($handle = fopen($file, "rb")) !== false)
{
while (!feof($handle))
{
echo fread($handle, 4096);
}
fclose($handle);
}
我发现所有的这些方法与测试时是非常不可靠500MB文件。第一个和第二个都会因所有浏览器和随机百分比而失败。有时候他们在几兆字节后就已经失败了,而其他时候他们已经达到了80%。但最终他们会停止下载没有任何错误。
第三方法是最可靠的。它在Firefox中很好地下载(虽然速度太慢;当它来自本地主机时,速度大约为700KB/s,当它工作时读取文件的方法速度为25MB /秒)和Chrome,但在Internet Explorer中,它大部分都失败了。在IE中,它首先陷入“获取文件信息”而没有获得任何“打开/保存”对话框。当我取消并再次尝试时,我会看到一个“打开/保存”对话框。
我在网上搜索,我无法找到,实际工作以及任何令人满意的方法。最好我只是希望Apache能够处理文件下载,因为它始终可以毫无问题地正常工作。但我不想将所有文件放入公共目录,因为每个人都可以下载所有文件。
我有什么选择?有没有最好的方法?因为他们填补了脚本与文件的内容存储
2010-11-10
pbean
+1
设置文件/ MIME头 - '' –
2010-11-10 14:12:43
+1
如果您启用了Apache的deflate模块,请不要忘记关闭下载脚本。它让我头痛了几个小时,因为Firefox在下载时没有显示进度条。要关闭它,请将'SetEnv no-gzip'添加到.htaccess文件中。 –
2010-11-10 14:29:15
+0
感谢您的提示,Lekensteyn,我看到它在另一个下载脚本示例中使用,以便及时检查是否启用了放气模块。我没有启用它。 –
2010-11-10 15:06:49