2012-12-06 49 views
1

我的一個項目使用PHPExcel將用戶'導出'信息導入到Excel文件中。當它工作時,它完美地工作。其他時候,只有一些人可以真正打開這些文件。強制PHPExcel文件被保存和下載

由於我需要存儲創建的導出,所以將它們保存在服務器上,然後使用readfile()下載創建的文件。當它不起作用時,(現在大多數情況下)人們會得到'錯誤的文件格式'錯誤。真奇怪的是,自文件保存以來,他們可以嘗試再次下載同一文件。然後它工作。

這是我最後的保存和下載代碼:

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
header('Content-Disposition: attachment;filename="'.$Temp_Export_File_Name.'"'); 
header('Cache-Control: max-age=0'); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
//$objWriter->save('php://output'); 
$objWriter->save('../project_files_images/created_exports/'.$Temp_Export_File_Name); 
readfile('../project_files_images/created_exports/'.$Temp_Export_File_Name); 
exit; 

有什麼不對的代碼,我很想念?該問題往往表現爲最新版本的Office用戶(Mac或Windows)

感謝您的輸入。

+0

在文本編輯器中打開這些問題文件中的一個,並在文件的開始和結尾查找任何空白字符,或者查找任何明顯的PHP錯誤消息 –

回答

0

馬克的提示是正確的。對於任何可能遇到這種情況的人來說,這就是發生的事情。

由於某種原因,PHPExcel需要'創建者'和'上次修改者'字段,我沒有使用它們。我簡單地註釋了PHPExcel代碼中涉及這兩項的兩行代碼。

它仍然不能解釋爲什麼它會影響強制文件而不是保存的文件,但我使用的理論是這樣的。

  1. 保存的文件被設置並保存所有的頭信息來創建。
  2. 強制文件以某種方式將打印的錯誤包含在文件頭部。
+1

發送給PHP的任何「屏幕」到標準的php://輸出流......這包括錯誤消息和警告。當您將PHPExcel文件保存到相同的輸出流時,它將包含來自PHPExcel的二進制流以及這些錯誤消息和警告。您正在使用標題告訴瀏覽器輸出是一個文件,所以你不會在屏幕上看到它。在輸出中包含這些消息意味着它不再是有效的Excel文件。當你保存到一個文件時,錯誤/警告信息仍然會到達php://輸出,並顯示在屏幕上,而不是文件中。 –

+0

謝謝你解釋並幫助解決這個問題。你爲什麼不解釋它作爲答案,以便我可以給你信用。 :) – user1532189