您的PDF文件不必在用户查看目录。他们可以在你的网站根目录之外。这样,没有人可以实际浏览到www.yoursite.ext/uploads/2395wrfhgt.pdf
自己下载或与他人分享链接。
为了下载PDF,您将拥有一个专门的脚本,它将对请求它的用户执行所有的访问检查,如果一切正常,它将设置适当的头文件,从文件系统中读取文件,以及打印出来给用户。
所以,让我们说你的网站是在/var/www/site/htdocs/
和您上传的每个PDF到/var/www/site/uploads/
。你甚至不需要对文件名进行散列处理,而是可以很好地保存它们以方便组织。
然后,所有下载文件的链接将变为指向www.yoursite.ext/download.php?id={fileid}
您的download.php将尽一切访问检查(正常登录,有权限下载文件等),然后请按照以下步骤操作:
$pathToPdf = '/var/www/site/uploads/some.pdf' ;
header('Content-Type: application/pdf');
header('Content-Length: ' . filesize($pathToPdf));
header('Content-Disposition: attachment; filename=' . 'some.pdf');
readfile($pathToPdf) ;
而这就好比它。一旦你得到这个工作,就可以考虑提高几件事情:
- 使用mod_rewrite或类似的有链接,这有助于一些浏览器意识到他们应该下载它的实际文件名PDF:www.yoursite.ext /下载/ {}的fileid .PDF
- 考虑使用Web服务器,而不是PHP的文件服务解决方案,如X-Sendfile头
非常感谢你。这听起来像是一个很好的解决方案。我很感激帮助。 – Don 2010-09-20 21:40:47