情况如下: 我有一个Apache服务器,它托管一个php程序,程序允许用户登录,用户可以上传文件,并将他们的上传文件分享给其他人,所以,我在htdoc文件夹中有一个名为“attachment”的文件夹,这是存储用户的附件。但我不希望人们直接访问这个文件夹,我只让一些用户(基于用户权限),获取他们想要的文件,其他人可以访问该文件...
例如,A上传file_a,并与B,C共享。用户B,C可以通过链接dl链接,但是用户D甚至他/她得到了链接,但是他/她仍然无法下载,即使他/她正在记录与否。我怎么做这个检查?谢谢。
答案 0 :(得分:2)
一种解决方案是将文件夹设为私有(即:将其移出htdocs
)并使用网关脚本。像这样:
$fullpath = '/path/to/your/files/'.basename($_GET['filename']));
// verify that the user is valid here
// verify that file exists here
// get the mime type
$finfo = finfo_open();
$mime = finfo_file($finfo, $fullpath, FILEINFO_MIME_TYPE);
// send it to the client
header('Content-Disposition: attachment; filename='.basename($fullpath));
header('Content-Type: '.$mime);
readfile($fullpath);
所以,你可以链接到它:
答案 1 :(得分:2)
不要将文件保存为数据库中的blob ...而是将文件保留在web目录之外,然后使用php文件检查访问权限,如果文件具有正确的访问权限,则将文件提供给人员。
$file = 'file_path';
header("Content-Type: image/jpeg");
header("Content-Length: " . filesize($file));
header("Content-Disposition: attachment; filename=\"filename.jpg\"");
header('Cache-Control: private');
header('Pragma: private');
$fp = fopen($file,"rb");
fpassthru($fp);
fclose($fp);
exit();
答案 2 :(得分:0)
三个选项:
1号是最干净的,但其他两个是可行的解决方案。