我想让PHP内部网的用户能够打开/保存PDF文件,这些文件位于Apache服务器上的文件夹中。PDF有公司的私人信息,所以我不想把它们放在网络文件夹里。
echo '<form name="openpdf" method="POST" action="downloadPDF.php">';
echo '<input type="hidden" name="pdf">';
echo'</form>';
<tr>
<td> PDFFile1 </td>
<td><a href=javascript:void(null); onclick='document.openpdf.pdf.value="c:'pdfs'example.pdf";document.openpdf.submit(); return false;'><IMG src="img/pdf.jpg"></a></td></tr>
下载PDF.php:
<?
$pdf=$_POST["pdf"];
if (file_exists($pdf)) {
header('Content-Description: File Transfer');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename='.basename($pdf));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($pdf));
ob_clean();
flush();
readfile($pdf);
exit;
}
?>
问题是,当用户打开/保存文件时,路径指向该文件夹,但在客户端PC中,而不是在服务器上。
如果您在服务器上从PHP内部处理PDF,则应该从URL中省略file:///
。
所以应该是
$pdf="c:/pdfs/example.pdf";
服务器不知道客户端PC,因此readfile
在此不工作。
您可能想尝试重定向,但我必须承认,我不知道浏览器是否出于安全原因允许重定向(您正在使用重定向切换协议)。
目前您正在做的是
- Javascript会在点击表单的pdf字段中输入值
c:'pdfs'example.pdf
,并将其提交到downloadpdf.php - 在服务器上,Downloadpdf.php将$_POST["pdf"]值分配给$pdf
- 如果文件$pdf存在,它只是简单地向用户提供下载该文件的权限
现在,这个可以在服务器&客户端是同一台计算机(特别是在PC上,因为C:
驱动器);即类似于本地XAMPP。但在现实世界中,用户和服务器将在完全不同的计算机上,if (file_exists($pdf))
总是会失败(除非在服务器的C:
上,文件夹pdfs
中实际上有一个文件exaple.pdf
)在现实世界中,步骤3将失败,因为$pdf=c:'pdfs'example.pdf
和服务器将查看其自己的C:
驱动器(如果是windows服务器)
你应该
1尝试使用HTML文件上载框上载文件
2使用$_FILES在服务器上获取/获取它并进行处理
3.发送下载所需的标头。
欲了解更多信息,请参阅HTML表单文件上传(谷歌)&_FILES(PHP.Net)