2010-08-19 86 views
1

我試圖強制下載一個位於我的網站根目錄之上的目錄中的圖像。下載發生好,並保存正確的文件名。但是,最終文件不是有效的圖像,無法正常打開或顯示。這裏是我的代碼:PHP:強制從目錄根目錄下載圖像?

 $photograph = new ViewPhotograph($photograph_id); 
     $photograph->setPhotographVars(); 

     $file = $photograph->getPath('small'); 
     $filename = '1.jpg'; 

     header('Content-Description: File Transfer'); 
     header('Content-Type: image/jpg'); 
     header('Content-Disposition: attachment; filename=' . $filename); 
     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; 

回答

3

調用ob_clean()

一旦事情是通過回聲或類似outputed,你不能擺脫這個,除非,當你面前

+0

之前的標題? – ThinkingInBits 2010-08-19 12:22:13

+0

Wooo ...工作。謝謝! – ThinkingInBits 2010-08-19 12:22:53

+0

也許在文件的開頭,捕捉所有錯誤或輸出 – xXx 2010-08-19 12:29:35

0

也許有PHP警告破壞流。

註釋掉標題並查看是否看到警告。如果你這樣做,修復它。 (請注意,您不應該在生產服務器上打開display_errors)。

+0

開始緩衝當我註釋掉之前做一個ob_start我收到通知:注意:ob_clean()[ref.outcontrol]:未能刪除緩衝區。沒有要刪除的緩衝區。在第35行的C:\ xampp \ htdocs \ invivid \ download.php和瀏覽器窗口中的一堆二進制文件中 – ThinkingInBits 2010-08-19 12:18:41

+0

@Thin將'ob_'調用與'flush'一起完全刪除。我不知道你爲什麼把它們放在那裏。 – Artefacto 2010-08-19 12:25:06