PHP保护PDF和DOC

时间:2011-09-15 07:47:13

标签: php pdf download access-control

我正在尝试向网站上的授权用户提供.pdf.doc个文件。用户只能在登录时看到文件选择页面,但如果他们了解完整的URL,则不会阻止未经授权的用户查看文档。

如何防止未经授权的用户访问这些文件?

4 个答案:

答案 0 :(得分:8)

答案很简单, @Jon Stirling在我打字的时候发布了这个,但我会为你解释一下

将您的文件放在公共html目录之外,

E.G cpanel setup

user/public_html
    /public_html/download.php

user/documents/
    /documents/file.doc
    /documents/file.pdf

@dhh发布了一个基本的download.php php文件但是因为你想强行下载你可以做的事情,比如找到并提供正确的mime类型,这是对他的代码的扩展,以便最好的方法1强制下载文件,2允许不同的文件类型

<强>的download.php

//check users is loged in and valid for download if not redirect them out
// YOU NEED TO ADD CODE HERE FOR THAT CHECK
// array of support file types for download script and there mimetype
$mimeTypes = array(
    'doc' => 'application/msword',
    'pdf' => 'application/pdf',
);
// set the file here (best of using a $_GET[])
$file = "../documents/file.doc";

// gets the extension of the file to be loaded for searching array above
$ext = explode('.', $file);
$ext = end($ext);

// gets the file name to send to the browser to force download of file
$fileName = explode("/", $file);
$fileName = end($fileName);

// opens the file for reading and sends headers to browser
$fp = fopen($file,"r") ;
header("Content-Type: ".$mimeTypes[$ext]);
header('Content-Disposition: attachment; filename="'.$fileName.'"');

// reads file and send the raw code to browser     
while (! feof($fp)) {
    $buff = fread($fp,4096);
    echo $buff;
}
// closes file after whe have finished reading it
fclose($fp);

如果你想添加对其他文件的支持,这里是mime类型的abig列表 http://www.hansenb.pdx.edu/DMKB/dict/tutorials/mime_typ.php

答案 1 :(得分:3)

您可以做的是为文件提供等效的PHP代理。

将文件放在webroot之外,然后编写一个脚本,检查用户是否允许访问。如果没有,重定向它们,如果有,则设置适当的标题并输出文件数据。

答案 2 :(得分:3)

您应该将所有下载存储在您的公共/用户可访问的文档根目录之外(当然在您的基础内),并添加下载脚本以便在用户获得授权时发送下载。

以下是如何“发送”文件以进行下载的一些示例。

$file = "ireland.jpg";
$fp = fopen($file,"r") ;
header("Content-Type: image/jpeg");

while (! feof($fp)) {
    $buff = fread($fp,4096);
    print $buff;
}

答案 3 :(得分:1)

这对我来说完成了这项工作:我在我的apache网络服务器上的普通文件夹(我将其命名为“docs”)中放入了.pdf和.htaccess文件,其中包含以下代码。

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

<Files /index.php>
    Order Allow,Deny
    Allow from all
</Files>

然后我从上面的Martin Barkers回答代码,将文件路径更改为“docs / sample.pdf”,并将其粘贴到我的根目录中的.php文件中。而已。您现在无法按网址访问该文件,但如果您运行test.php,则可以下载该文件。