2010-06-07 60 views
1
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); 

我下載的文件卻無法打開文件?爲什麼?無法打開用php代碼下載的文件

+1

只爲上下文的人回答這樣的:代碼示例提問引述是從文檔上php.net爲[ReadFile的](HTTP:/ /uk2.php.net/readfile)功能 – 2010-06-07 02:59:20

+0

無法在本地機器上的...中打開文件? – alex 2010-06-07 02:59:29

+0

使用本地主機 在本地主機的webroot打開此文件,它打開, 當我下載並打開這個文件,但不能 – Chameron 2010-06-07 09:13:54

回答

3

嘗試下面的代碼(未測試):

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_end_clean(); 
readfile($file); 
exit(); 
+3

是不是輸出緩衝的東西之一完成允許頭之前通過任何內容? – 2010-06-07 03:55:29

+1

@Arda Xi正確,ob_clean不會影響標題。 – Charles 2010-06-07 04:02:11

+0

我糾正了(這就是爲什麼我說「我認爲」而不是做出明確的斷言)。感謝那些傢伙的接班人 - 我每天都會學到新的東西。 – 2010-06-07 04:49:22