2012-01-13 214 views
3

我一直在試圖弄清楚什麼是錯誤的,但每次下載圖像並嘗試打開它時,都會說文件已損壞。下載文件已損壞 - 標題

$ h是從數據庫中拉出的路徑,$ h顯示頁面上的圖像,但我不明白爲什麼它不會下載。有任何想法嗎 ??

​​
+0

您是否嘗試保存下載的文件並將其與服務器上的內容進行比較? – 2012-01-13 16:12:53

+0

似乎你的標題數據不知何故不正確,看看md5散列和文件大小。 – 2012-01-13 16:15:07

+0

是的,我可以右鍵點擊圖片,它會下載罰款。嗯,我認爲這是頭,但無法找出最新情況。將刪除散列並查看它的功能。 – Jason 2012-01-13 16:16:55

回答

7

也許嘗試你的ReadFile行之前添加以下兩個命令。

ob_clean(); 
flush(); 
readfile($file); 

這些行在readfile中的PHP文檔的示例中。

+1

謝謝! ob_clean()獨自爲我做了詭計。用沖洗它只是顯示內容。 – Aiphee 2014-11-28 12:04:44

+0

是的,我還需要刪除flush()。 – Pierre 2017-12-14 09:07:39

2

試試這個:

$localPath = realpath("../$h"); 
if (!file_exists($localPath)) { 
    exit("Cannot find file located at '$localPath'"); 
} 

header('Pragma: public'); // required 
header('Content-Length: '.filesize($localPath)); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename="'.md5($localPath).'.'.$ext.'"'); 
header('Content-Transfer-Encoding: binary'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0', false); 
header('Cache-Control: private', false); // required for certain browsers 

readfile($localPath); 
exit; 
+0

嘗試過,它下載但仍無法打開它。你認爲這可能是文件權限?無論如何,如果這樣做會產生影響,那麼在wamp上運行我的代碼。 – Jason 2012-01-13 16:27:07

+0

這裏最可能的答案是您的文件中''標籤之前或之後有一些前/後空格。這些應該是腳本中的第一個也是最後一個字符。您可以放心地忽略'?>'結束標記。在上面的代碼之前,你也可以調用'echo','print'等 - 記住除了文件數據之外,你不能在輸出緩衝區中寫入任何內容。同時確保你在readfile()調用後立即調用'exit' /'die' **。 – DaveRandom 2012-01-13 16:36:59

+0

Ahhh是多麼愚蠢,之後有一個空白空間現在像夢一樣工作..感謝DaveRandom – Jason 2012-01-13 16:44:24