【发布时间】:2013-10-04 20:55:50
【问题描述】:
我想保护 pdf 文件不被直接链接,而是让我的登录用户能够访问它。我有一个链接,该链接当前指向一个发布表单的 javascript 函数: $('nameofdoc').setProperty('value',doc); document.getElementById('sendme').submit();
其中 sendme 是表单的名称,而 nameof doc 是我要显示的文档的索引。
然后转到一个 php 文件:
$docpath = $holdingArray[0].$holdingArray[1];
$file = $holdingArray[0]; //file name
$filename = $holdingArray[1]; //path to the file]
header( 'Location:'.$docpath ) ;
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="'.$filename . '"');
readfile($filename)
这一切正常,它加载文件并输出 pdf。我不能做的是保护目录免受直接链接 - 即 www.mydomain.com/pathToPdf/pdfname.pdf
我曾考虑使用 .htaccess 来保护目录,但它位于共享主机上,所以我不确定安全性,无论如何,当我尝试时,我无法让它工作。
任何帮助都会很棒,因为这是我尝试解决此问题的第四天。
谢谢
更新
谢谢你,我得到了很多帮助,但我还没到那里。
我有一个 .htaccess 文件,当从目录请求 pdf 时,它现在会启动另一个 php 文件:
RewriteEngine on
RewriteRule ^(.*).(pdf)$ fileopen.php
当 fileopen.php 文件启动时,它无法打开 pdf
$path = $_SERVER['REQUEST_URI'];
$paths = explode('/', $path);
$lastIndex = count($paths) - 1;
$fileName = $paths[$lastIndex];
$file = basename($path);
$filepath = $path;
if (file_exists($file)) {
header( 'Location: http://www.mydomain.com'.$path ) ;
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=".$file);
readfile($filepath);
}else{
echo "file not found using path ".$path." and file is ".$file;
}
输出是 使用路径 /documents/6/Doc1.pdf 找不到文件,文件是 Doc1.pdf
但该文件确实存在并且在那个目录中 - 有什么想法吗??
好的,我很高兴地报告 Jaroslav 确实帮助我解决了这个问题。他的方法效果很好,但很难将所有目录内容排成一行。最后,我花了几个小时玩弄组合来让它发挥作用,但他给出的原则运作良好。谢谢
【问题讨论】:
-
你在
.htaccess中试过的代码是什么? -
TheWolf 我打算使用:命令拒绝,允许拒绝所有允许来自 127.0.0.1 但它是共享主机,所以我认为这意味着服务器上的任何人都可以访问?哦,是的,它没有用:)
-
不需要
Allow from 127.0.0.1部分,因为只有php 试图访问不受.htaccess影响的文件。 -
您可以将 PDF 目录移到您的 Web 根目录之外吗?这在大多数共享主机上都是可能的。
-
没有允许来自不起作用,它会给出一个禁止的消息
标签: php file .htaccess pdf copy-protection