打开/保存位于服务器文件夹中的PDF

时间:2012-07-09 16:51:24

标签: php pdf save

我想向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中而不是服务器。

3 个答案:

答案 0 :(得分:1)

如果您在PHP内部处理服务器内部的PDF,则应省略URL中的file:///

所以它应该是

$pdf="c:/pdfs/example.pdf";

答案 1 :(得分:0)

服务器不知道客户端PC,因此readfile在这里不起作用。

您可能想尝试使用重定向,但我必须承认,如果浏览器出于安全原因(您正在使用重定向切换协议),我不知道。

答案 2 :(得分:0)

目前你正在做的是

  1. 点击后,Javascript将c:\pdfs\example.pdf的值放在表单的pdf字段中,然后将其提交到downloadpdf.php。
  2. 在服务器上,Downloadpdf.php将$ _POST [“pdf”]值分配给$ pdf。
  3. 如果文件$ pdf存在,它只是继续提供用户下载此文件。
  4. 现在,可能可以在服务器&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)