0

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

4

3 回答 3

1

如果您在服务器内部通过 PHP 处理 PDF,您应该file:///从 URL 中省略 。

所以应该是

$pdf="c:/pdfs/example.pdf";
于 2012-07-09T16:55:54.020 回答
0

你现在正在做的是

  1. Javascript 在单击时在表单的 pdf 字段中输入值c:\pdfs\example.pdf并将其提交到 downloadpdf.php。
  2. 在服务器上,Downloadpdf.php 将 $_POST["pdf"] 值分配给 $pdf。
  3. 如果文件 $pdf 存在,它只是继续提供用户下载此文件。

现在,这可能适用于服务器和客户端是同一台计算机的情况(特别是在 PC 上,因为C:驱动器);即喜欢本地XAMPP。但是在现实世界中,用户和服务器将在完全不同的计算机上,if (file_exists($pdf))总是会失败(除非在服务器上C:实际上文件exaple.pdf夹中有一个文件pdfs)在现实世界中,第 3 步将失败,因为 $pdf =c:\pdfs\example.pdf并且服务器将查看它自己的 C:驱动器(如果它是 Windows 服务器)。
你应该

1 尝试使用 HTML 文件上传框上传文件。
2 使用 $_FILES 在服务器上获取/获取它并进行处理
3. 发送所需的标头以进行下载。

有关详细信息,请参阅HTML 表单文件上传 (Google)$_FILES (PHP.Net)

于 2012-07-09T18:14:49.177 回答
0

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

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

于 2012-07-09T16:53:28.620 回答