2015-12-20 6 views
2

Если я сохранить его в файл:PHPExcel возвращать поврежденный файл

$objWriter->save("test.xls"); 

А затем загрузить с сервера, я могу открыть файл без каких-либо проблем.

Но когда я пытаюсь сохранить в php://output, получил поврежденный файл, как описано в this вопрос.

Я попытался это:

ob_end_clean(); 
header("Content-type: application/vnd.ms-excel"); 
header('Content-Disposition: attachment; filename="test.xls"'); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 

$objWriter->save('php://output'); 
exit; 

ob_end_clean(); не помогает.

Я пробовал PHPExcel_Writer_Excel2007 и PHPExcel_Writer_Excel5. Та же проблема.

UPD: Как я вижу, файл excell имеет спецификацию при запуске («EF BB BF»). Но я проверил весь мой скрипт, у них нет символа спецификации. Итак, означает ли это, что PXPExcell добавляет спецификацию?

+0

Нет, PHPExcel не добавляет BOM: если это так, он никогда не будет работать для всех, кто в любой точке мира (в том числе и я) ..... Если BOM добавляется это не PHPExcel –

+0

@MarkBaker У меня нет символов спецификации в моих скриптах. Я проверил все файлы с шестнадцатеричным редактором, нет 'EF BB BF' – Suvitruf

+0

Есть ли что-нибудь еще, видимое в файле, когда вы просматриваете его в виде открытого текста? Любые ведущие/конечные пробелы? Любые текстовые сообщения? –

ответ

2

Я добавил ob_end_clean(); также после раздела заголовков. И символ спецификации исчез.

ob_end_clean(); 
header("Content-type: application/vnd.ms-excel"); 
header('Content-Disposition: attachment; filename="test.xls"'); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
ob_end_clean();