拒绝直接访问php web文件夹中的PDF文件

时间:2018-04-05 09:10:56

标签: php html .htaccess pdf

有一个完全运行的PHP站点,只有在使用ID /密码登录时才能访问。

我被要求在网站上添加一个上传PDF文件并在浏览器中显示现有PDF文件的功能。

所以我通过使用iframe在浏览器中嵌入PDF文件来实现这一目标。

但问题是,PDF文件不应该直接访问(访问www.aaa.com/pdf/test.pdf时不应该打开),并且只能在站点中显示这样只有授权用户才能查看该文件。

所以我尝试了一些事情:

  1. .htaccess:我对PHP / HTML不太熟悉所以在stackoverflow上搜索了一些答案并尝试了它们没有成功。
  2. ,例如

    order deny,allow
    deny from all
    allow from 127.0.0.1
    

    Require local
    

    等等。它显然阻止了直接访问,但也没有允许从网站上显示PDF(www.aaa.com/showPDF.php)。考虑到这一点,上述方法似乎只允许从物理服务器打开时读取文件。

    1. 将PDF文件夹移到webroot之外:我成功地将上传文件夹移到webroot之外并上传到它,但iframe无法正常工作,因为PHP无法找到PDF文件。解决方法是使用标头和PHP readfile(),但我似乎无法修改我所在的标头,因为标头已经预先发送到我无法修改的文件中。
    2. 我认为我过于复杂了,我认为合适的.htaccess文件只会这样做,但在这方面不了解多少。非常感谢这里的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

  

似乎很简单。

Order Deny,Allow
Deny from all
Allow from www.aaa.com
     

的工作。谢谢你的建议!

=======================================

编辑:上面没有工作。

事实上,我没有权限访问我的webroot。 因此,我将pdf文件存储在我的webroot中的文件夹中,并使用以下命令拒绝所有人访问:

Deny from all

在.htaccess。

之后,由于.htaccess拒绝iframe,我尝试使用file_get_contents()打印PDF的内容。但这需要设置标题信息,例如

$contents = file_get_contents($filePath);
header('Content-Type: ' . mime_content_type($filePath));
header('Content-Length: ' . filesize($filePath));
echo $contents;

但是显示PDF文件内容的php页面(showPDF.php)在初始化期间已经发送了标题,我没有权限修改该部分。

所以我制作了一个新的php文件(pdfviewer.php),添加了会话信息,并添加了上面的4行。之后我在showPDF.php中iframed pdfviewer.php,它终于奏效了。

我认为这个问题真的特定于我目前的情况,但希望有人觉得它很有用。

另外,感谢@CBroe,因为我意识到我错了并得到了一些提示!