我想向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>
downloadPDF.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中而不是服务器。
答案 0 :(得分:1)
如果您在PHP内部处理服务器内部的PDF,则应省略URL中的file:///
。
所以它应该是
$pdf="c:/pdfs/example.pdf";
答案 1 :(得分:0)
服务器不知道客户端PC,因此readfile
在这里不起作用。
您可能想尝试使用重定向,但我必须承认,如果浏览器出于安全原因(您正在使用重定向切换协议),我不知道。
答案 2 :(得分:0)
目前你正在做的是
c:\pdfs\example.pdf
的值放在表单的pdf字段中,然后将其提交到downloadpdf.php。现在,可能可以在服务器&amp;客户端是同一台计算机(特别是在PC上,因为C:
驱动器);即在本地XAMPP上。但在现实世界中,用户和服务器将位于完全不同的计算机上,if (file_exists($pdf))
总是会失败(除非在服务器上C:
实际上文件夹{exaple.pdf
中存在文件pdfs
1}})
在现实世界中,第3步将失败,因为$ pdf = c:\pdfs\example.pdf
并且服务器将查看自己的 C:
驱动器(如果它是Windows服务器)。
你应该
1尝试使用HTML文件上传框上传文件
2使用$ _FILES在服务器上获取/获取它并进行处理
3.发送所需的标题以供下载。
有关详细信息,请参阅HTML Form File Upload (Google)&amp; $_FILES (PHP.Net)