2011-06-08 65 views
0

我有以下功能:PDF下載不工作

if (isset($_REQUEST["f"])) 
{ 
    //get file details from database 
    $fileID=$_REQUEST["f"]; 
    $sql = "select * from sds_files where file_id = " .fquery_sanitize($fileID); 
    $result = fquery_db($sql); 

    //$file_extension = strtolower(substr(strrchr($filename,"."),1)); 
    if(mysql_num_rows($result) >0) 
    { 
    $row = mysql_fetch_assoc($result); 
    $filename = $row['file_name']; 
    $file = file_GetPath($fileID); 

    header ("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header('Content-Type: application/octetstream'); 
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-length: ".filesize($file)); 
    header("Content-disposition: attachment; filename=\"".basename($filename)."\""); 
    readfile("$file");     
    } 
    else 
    { 
    echo "File cannot be found"; 
    } 
} 
else 
{ 
    echo "No file selected"; 
} 

此得到一個文件,它可以是任何類型,.xls的,.DOC .dox,.PDF等..

對於大多數PDF文件,此代碼可以正常工作,但在個別情況下,我得到用戶聲稱他們收到「找不到文件」等錯誤。但是,如果我給他們直接鏈接到一個文件,它工作正常。

我不知道問題出在什麼地方,我已經強制使用附件類型來強制保存它,而不是它在瀏覽器中出現,就像在ie6中一樣,如果你使用它,它往往會崩潰adobe插件而不是程序。

編輯:

錯誤之際,一個Adobe Acrobat錯誤的一部分,沒有什麼做的PHP或Apache的錯誤代碼。更多客戶相關。由於用戶的行爲不同,我將顯示代碼。

我已經仔細研究過它,它似乎直接鏈接有一個MIME類型的PDF,這adobe告訴瀏覽器屬於Adobe閱讀器,我想知道是否保存將強制相同的行爲,導致錯誤。

任何幫助,將不勝感激!

+1

「HTTP Error 404 - File Not Found」或由PHP腳本生成的「File can not be found」消息中的「找不到文件」? – 2011-06-08 08:41:23

+0

可能無關,而是$ fileID =(int)$ _REQUEST [「f」]'&'mysql_num_rows($ result)> = 1''''''file'($ file);' – 2011-06-08 08:46:04

+0

另外file_GetPath函數使用了pa rameter id是否來自請求,該函數是否返回文件的正確路徑(如果有的話)爲什麼要查詢db – 2011-06-08 08:52:19

回答

0

好,似乎是獨立於:

標題(「內容處置:附件; ....

這迫使瀏覽器下載內容,而不是使用瀏覽器插件,從而導致