2013-06-26 29 views
2

我有下面的代碼自動下載文件 在點擊提交按鈕,一切似乎工作正常; 該檔案下載格式適合,大小合適,但是當我想要打開它時,出現錯誤,文件無法讀取,可能是 問題?PHP文件下載問題 - 無法讀取

$file=mysql_fetch_assoc($sel); 
$file=$file['downloadlink']; 
header('Content-Type: "application/octet-stream"'); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-length: ".filesize($file)); 
header("Content-disposition: attachment; filename=\"".basename($file)."\""); 
readfile($file); 
+0

是與右擴展存儲的文件?例如'.docx' vs'.doc' – verbumSapienti

+0

我在這裏看到的唯一可能與您的文件混淆的是傳輸編碼 –

+0

是的,文件存儲在右邊的擴展名中。 – bodesam

回答

2

你可以嘗試從readfile()意見調整這一功能:

function DownloadFile($file) { // $file = include path 
    if(file_exists($file)) { 
     header('Content-Description: File Transfer'); 
     header('Content-Type: application/octet-stream'); 
     header('Content-Disposition: attachment; filename='.basename($file)); 
     header('Content-Transfer-Encoding: binary'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Pragma: public'); 
     header('Content-Length: ' . filesize($file)); 
     ob_clean(); 
     flush(); 
     readfile($file); 
     exit; 
    } 
} 
+0

Wohoh!謝謝你,我在代碼中添加了缺失的行,現在一切正常,可以打開pdf和zip。 – bodesam

0

我有一個除了這一點。如果文件大小很大,它會下載我們根本無法打開的空文件。這不是'readfile'函數本身的問題。問題是將大文件讀入內存。所以,爲了防止這種問題,我們必須在'readfile'函數之前立即使用'ob_end_flush()'來關閉輸出緩衝區。

希望這個技巧可以節省一些人的時間。 :)