2012-05-08 60 views
0

我有一個文檔下載站點,用於跟蹤下載的文件。PHP force header下載不能在zip文件上工作

我的問題是越來越多的zip文件通過我使用的腳本下載。除了zip文件以外,其他每個文件都被迫下載。當一個zip文件被推送時,它會進入download.php頁面,腳本沒有被推出。

  ob_start(); 
    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; 
+1

不會'ob_clean'丟棄剛剛設置的標題嗎? – bfavaretto

+0

你還有什麼樣的服務器? –

+0

和你試過什麼瀏覽器?一個或多個? – Anton

回答

0

下面的代碼片段,對我的作品:

if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { 
    header('Content-Type: "application/octet-stream"'); 
    header('Content-Disposition: attachment; filename="'.basename($file_url).'"'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header("Content-Transfer-Encoding: binary"); 
    header('Pragma: public'); 
    header("Content-Length: ".filesize($file_url)); 
} else { 
    header('Content-Type: "application/octet-stream"'); 
    header('Content-Disposition: attachment; filename="'.basename($file_url).'"'); 
    header("Content-Transfer-Encoding: binary"); 
    header('Expires: 0'); 
    header('Pragma: no-cache'); 
    header("Content-Length: ".filesize($file_url)); 
} 
readfile($file_url); 
+0

它既在Firefox和IE上。它適用於我的本地主機,但不在我的生產服務器上,這使我認爲它可能是我的活服務器(共享主機運行Apache) – Jeff

+0

是否開始下載?任何錯誤? –

+0

沒有錯誤,它甚至沒有開始下載。只要走到哪裏,就會看到空白的頁面。如前所述,它在本地主機上工作。 – Jeff

0

有類似的問題,這報價幫助了時間:

header('Content-Disposition: attachment; filename="'.basename($file).'"'); 
0

我沒有使用base_name的內容性格和長度,我有完整的道路。使用base_name爲我工作。