2013-11-22 77 views
2

我想實現的PHP力的下載和使用下面PHP力下載可以下載

$length = sprintf("%u", filesize($path)); 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename="'.basename($path).'"'); 
header('Content-Transfer-Encoding: binary'); 
header('Connection: Keep-Alive'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header('Content-Length: ' . $length); 
set_time_limit(0); 
readfile($path); 
exit; 

代碼中的文件與全尺寸成功下載(我打開記事本文件++後沒有打開的文件,沒有PHP錯誤或警告),但我無法打開文件。奇怪的是我可以下載並打開任何問題的PDF文件。但是如docx,png,jpg等格式的文件被提取

+0

這些反引號是什麼? –

+0

這是不知何故添加,當我把問題here.It是不存在的真實代碼 –

+0

我已經在這裏回答了類似的問題:http://stackoverflow.com/questions/23192683/php-force-download-downloading-corrupted-file/23193618#23193618 – Seti

回答

0

嘗試暫時刪除您的內容長度標頭,它可能是錯誤的並導致文件不完整地下載(可能是一個字節)。另外嘗試設置您的到期時間高於0;我在IE中看到了由此造成的錯誤,因爲在外部程序有時間加載之前,瀏覽器正在從緩存中刪除文件。

+0

對我來說是一個炒鍋:( –

+0

感謝SpliFF,這對我來說非常合適我有同樣的問題接受Content-Type:設置爲正確的內容類型(應用程序/ pdf) – matty

0

時使用此武力下載

header("Cache-Control: maxage=1"); 
header("Pragma: public"); 
header("Content-type: application/force-download"); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-length: ".filesize($path)); 
header("Content-disposition: attachment; filename=\"".basename($path)."\""); 
+0

對不起din工作我:( –

0

試試這個代碼

$file = "xyz.html" 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.basename($file)); 
header('Content-Transfer-Encoding: binary'); 
readfile($file); 
+0

對不起,它爲我工作:)( –

+0

發生了哪個錯誤?.... –

+0

當我在Notepad ++中打開文件時沒有顯示錯誤,我將原始文件與下載的文件進行了比較。可以發現原始文件有一些unicode字符,下載的文件沒有顯示它(它顯示了一些字母,如「EFR TRS」)。 –

0
$file=FCPATH."downloaded/1462026746_IMG_2015.JPG"; //file location 
     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; 
     } 
     else { 
      die('The provided file path is not valid.'); 
     } 
+0

這將工作正常。請刷新瀏覽器下載窗口。直到下載完成,請稍候。 –