2012-05-14 108 views
8

我試圖讓網站有一個強制下載PDF的按鈕。使用PHP強制下載PDF

繼承人的按鈕的HTML:

<a href=scripts/download.php> 
    <input type="image" src="images/download.gif" alt="Submit button"/> 
    </a> 

到目前爲止PHP腳本:

<?php 
    header('Content-Type: application/pdf'); 
    header('Content-disposition: attachment;filename=documents/ECM_IT_ResumeDownload.pdf'); 
    readfile('documents/ECM_IT_ResumeDownload.pdf'); 
    ?> 

這似乎要下載的文件很好,但是當我去打開它,我得到這個錯誤:

「Adobe Reader無法打開'documents_ECM_IT_ResumeDownload.pdf',因爲它不是支持的文件類型,或者是因爲文件已損壞(例如,它是作爲電子郵件發送的附件和未正確解碼)。「

任何幫助將不勝感激。

編輯 開業的PDF文本編輯器,並得到這個消息:


警告:ReadFile的(文件/ ECM_IT_ResumeDownload.pdf)[function.readfile]:未能打開流:在HTML沒有這樣的文件或目錄/腳本/的download.php上線

該文件是definit儘管如此。在HTML /文件/ ECM_IT_ResumeDownload.pdf

+2

將鏈接標籤中的輸入標籤包裝很奇怪 – Ben

+0

最有可能是某些東西導致輸出包含一些無效的pdf內容..也許服務器發生錯誤。嘗試在文本編輯器中打開結果文件 – Ben

+0

Ahh我沒有注意到,我已經做了另一個鏈接,但沒有注意到我仍然有 –

回答

2

您是否嘗試過擺脫結束PHP標籤(在> ) 最後?它會將頁面視爲一個純粹的PHP頁面,刪除可能意外附加到輸出結尾的任何可能的新行。這在我動態創建用於下載的Excel文件時幫助了我,並且他們正在下載損壞。看看這個頁面瞭解更多信息:

http://www.php.net/manual/en/language.basic-syntax.phptags.php

從你編輯的問題,它看起來像PHP無法找到該文件。嘗試使用文件的絕對路徑,如下所示:「c:\ blah \ de \ blah \ bloo.pdf」或「c:/blah/de/blah/bloo.pdf」。如果其中一條路徑正常工作並正確下載,則相對路徑在某些方面不正確。

+0

那是什麼我不知道,我還以爲你總是不得不關閉它們 但它不解決問題不幸 –

+2

在ReadFile的嘗試絕對路徑()調用:「C:/html/downloads/ECM_IT_ResumeDownload.pdf」或什麼。 – abelito

+0

這個技巧謝謝:) –

4

嘗試刪除該文件的路徑,只是在內容保留文件名:

header('Content-Type: application/pdf'); 
header('Content-disposition: attachment; filename=ECM_IT_ResumeDownload.pdf'); 
+0

仍然有同樣的錯誤。 –

18
$file_url = www.example.com/pdffolder/$pdfname; 
header('Content-Type: application/pdf'); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=".$pdfname); 
readfile($file_url); 
0

順便說一句,有點晚了,但正確這裏確定問題:

你的下載腳本在scripts/download.php和您要下載的文件在documents/[...].pdf

因此,您的readfile()函數應該遍歷到父目錄(scripts/之外),例如, readfile('../documents/[...].pdf');