我在服务器上使用apache。
您可以尝试以下方法:
将文件移到“外部”网络根部的文件夹中,这样没有人可以通过浏览器访问它
使用会议来检测一个人是否已填写表格
使用php驱动的文件下载脚本。以其天真的形式,它看起来像这样:
if(isset($ _session ['ok_to_download'])== false) { 标题(“位置:MUST_FILL_THIS_FIRST.PHP”); 出口(0); } 标题(“ content-type:application/pdf”); //仔细检查以上,谷歌搜索我不确定 echo file_get_contents('some_directory_inaccessible_thru_www/'。$ _get ['pdf_name']); //理想情况下,需要上述二进制功能
在apache中,您应该能够使用重写来将请求转换为其他形式。例如,将
/pub/docs/x.pdf
request.php?file=/pub/docs/x.pdf
RewriteRule ^/pdf/(.*)\.pdf/ request.php?file=/$1.pdf
2/也作为脚本的一部分进行下载,而不是直接访问PDF。由于表格的提交是HTTP请求,因此您应该能够立即用PDF内容回答,而不是将其重新指导到下载页面。
第二选项将是我的选择,因为它是:
tops的人们只需请求xx.pdfx而不是xx.pdf.即可弄清楚他们可以进入PDF。 使人更快地获取PDF(他们不必再次单击链接)。
注意,我的答案是关于.NET网站的答案,但是我敢肯定,PHP中的某个地方也存在相同的结构。
我将具有一个带有 *.pdf的httpModule,它只是对request.php?... etc(在我的情况下request.aspx)进行响应。当您知道要显示哪个PDF并授权do do and a pde.contenttype = [mime of pdffffffffffffefect.php?... etcecte.php?响应end() 您还可以添加其他东西,以使其变得更好,例如文件大小等。但是在最小情况下,这会起作用。如果您想在C#中使用代码,我可以在大约3分钟内提出一些内容,但是在PHP中,我很迷失了。我会开始寻找httpmodules以及如何在PHP中写下它们。
为“ php httpmodule”的googling导致了这一点:php中的asp.net httpmodules的等效性,所以我可能有点错,但是希望这是一个起点。
如果您使用的是Apache Web服务器,请使用.htaccess文件。您需要确保您启用了mod_rewrite,但是一旦您可以使用这两个简单的行重写所有文件:
螺纹仪 重写 ^.pdf $ /rewrite.php [nc,l]
如果您使用的是IIS,则可以使用isapi_rewrite完成类似的事情。 您的其他替代方法是将您的PDF放置在无法公开访问的目录的内部,然后任何对PDF资源提出的请求都会返回访问拒绝的错误,并且只能通过适当的下载脚本访问文件。
if($user==authenticated){
//set pdf headers
echo file_get_contents('actual.pdf');