Php 防止直接访问EDM(?)之类的文件

Php 防止直接访问EDM(?)之类的文件,php,.htaccess,Php,.htaccess,我有一个php web应用程序,供几个用户使用。他们可以上传目录中的文件:“files”创建一个子目录,并使用给用户“foo”的唯一名称存储该文件,因此:mydomain.com/files/foo/thefilename.doc 它可以工作,但为了防止直接访问该文件,并防止其他用户访问他们不属于的文件,我将.htaccess文件放置为: Order Deny,Allow Deny from all 它可以工作,但是在我的web应用程序中,如果用户“foo”想要访问和显示他的文件,他会收到40

我有一个php web应用程序,供几个用户使用。他们可以上传目录中的文件:“files”创建一个子目录,并使用给用户“foo”的唯一名称存储该文件,因此:mydomain.com/files/foo/thefilename.doc

它可以工作,但为了防止直接访问该文件,并防止其他用户访问他们不属于的文件,我将.htaccess文件放置为:

Order Deny,Allow
Deny from all
它可以工作,但是在我的web应用程序中,如果用户“foo”想要访问和显示他的文件,他会收到403错误

如何(如EDM电子文档管理)存储文件以防止直接访问,但允许正确的用户访问


非常感谢

您可以通过使用PHP动态获取并呈现文件内容来实现这一点

也许是这样:

$filename = $_GET['filename'];
// TODO: fill $allowedFiles[];
if (!in_array($filename, $allowedFiles))
   exit;

header('Content-Type: text');
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Cache-Control: max-age=0');

echo file_get_contents($filename);

当然,这只是个概念,为什么不使用会话呢

只需在每页的开头添加
(在
之前),并限制用户登录后对某些文件的访问


您需要创建一个PHP脚本,将请求的文件发送给用户。这使您可以控制谁可以下载什么,并且只有PHP脚本才可以访问实际的文件系统(我甚至会使用文件级权限)可能重复我知道我的php脚本可以访问这些文件并生成下载到客户端,我这样做:(…)头(“内容长度:”(字符串)(文件大小($file));头('Content-Disposition:attachment;filename=“”。$filename.””);头(“内容传输编码:binary\n”);ob_end_clean();readfile($file);但是文件可以是图像或pdf,我想在browser@Alexking2005,在我的答案下发表了评论,但重复一下(可能您错过了),只需根据扩展名更改内容类型标题:“image/png”、“application/pdf”,所有现代浏览器都将以您希望的方式处理它。我有1000个用户,无法检查会话的所有访问权限。会话是特定于用户的,因此即使您有1.000.000.000个用户,每个用户也只有1个会话。我已经使用此脚本触发用户下载。但在这种情况下,文件可以是图像或文件pdf文件,我想在浏览器中打开它。然后只需根据扩展名更改内容类型标题:“image/png”、“application/pdf”,所有现代浏览器都会以您想要的方式处理它