2012-07-09 107 views
0

我想給PHP內聯網的用戶提供打開/保存PDF文件的可能性,這些文件位於Apache服務器的文件夾中。 PDF有公司的私人信息,所以我不想把它們放在網絡文件夾中。打開/保存位於服務器文件夾中的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,而不是在服務器上。

+1

的一般過程是下載,編輯並把它放回去。但是你想究竟是什麼? – SuperSaiyan 2012-07-09 17:01:09

+0

打開存儲在apache服務器上的文件夾中的pdf文件。 – 2012-07-09 17:16:03

+0

據推測,一旦通過內聯網提供,「在客戶端PC」中的副本位於臨時文件夾中,由瀏覽器保存。這很正常 - 如果您想要保存到集中式副本,則可能需要使用網絡文件服務器。 – halfer 2012-07-09 19:27:16

回答

0

服務器不知道客戶端PC,所以readfile在這裏不起作用。

您可能想嘗試使用重定向,但我必須承認,如果瀏覽器出於安全原因(您正在使用重定向切換協議),我不知道該怎麼辦。

1

如果您在PHP的服務器上內部處理PDF,則應該從URL中省略file:///

所以應該

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

同樣的結果!指向客戶端c:/pdfs/example.pdf – 2012-07-09 17:14:47

+0

@MikeDias「點」是什麼意思?在客戶端,瀏覽器接收PDF,這裏顯示的URL在哪裏? – SuperSaiyan 2012-07-09 17:21:00

+0

如果我在客戶端PC上創建該文件夾並複製example.pdf,然後在我的頁面中打開/保存工程,因爲php在客戶端c:\ pdfs \中查找pdf。我如何更改代碼以確保源路徑在服務器文件夾上而不在客戶端中?謝謝! – 2012-07-09 17:25:30

0

你正在做的那一刻是什麼

  1. JavaScript是推杆c:\pdfs\example.pdf值在點擊窗體的PDF領域,並將其提交給downloadpdf.php。
  2. 在服務器上,Downloadpdf.php將$ _POST [「pdf」]值分配給$ pdf。
  3. 如果文件$ 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 Form File Upload (Google) & $_FILES (PHP.Net)

相關問題