Я пытаюсь загрузить файл excel, созданный «на лету» с заголовками php:
$filename = "assets.xls"; header('Content-Type: application/vnd.ms-excel'); header("Content-Disposition: attachment;filename=$filename"); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output');
Но это не работает на IE8 (но на каком-то другом компьютере с IE8 работает ??? !!). IE8 пытается загрузить файл export.php вместо assets.xls. Любая идея, почему IE8 делает это?
Попробуйте правильно отформатировать заголовок в соответствии с спецификацией HTTP с пробелом между ними ;
и filename
и цитаты вокруг имени файла:
header('Content-Disposition: attachment; filename="' . $filename . '"');
Я столкнулся с той же проблемой. И я использую следующий метод для устранения проблемы.
header("Cache-Control: private"); header("Content-Type: application/vnd.ms-excel"); header("Content-disposition: attachment; filename=$filename");
У меня точно такая же проблема! Просто он заработал, удалив заголовок Content-Type, поэтому я думаю, что IE8 не играет хорошо с этим типом ..? Не уверен, что это лучшая альтернатива, но это определенно для меня игрок.
У меня такая же проблема. Я добавил следующий заголовок перед заголовком Content-Deposition.
header("Content-type: text/csv"); header("X-Download-Options: noopen"); header("Content-Disposition: attachment; filename=\"ExcelFileName.csv\"");
Кажется, это работает для меня. Однако сначала вы должны сохранить файл. Вы не можете открыть сразу.
Попробуй это:
$filename = 'Excel_Sheet_'.date('Ymd').".xls"; header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=$filename"); header("Content-Type: application/vnd.ms-excel; "); header("Content-Transfer-Encoding: binary"); header('Cache-Control: max-age=0'); ob_clean(); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit;
После попытки сразиться с подобной проблемой на целый день, я обнаружил, что установка
header("Cache-Control: private");
Было лучшим решением. Я уже пытался обеспечить, чтобы Content-Length
, Content-Type
и Content-Disposition
были установлены и правильно отформатированы. Проблема в том, что новые окна и вкладки IE8, похоже, не нравятся загрузке, отправленной через заголовки PHP при первом запуске. При повторной попытке файла после первоначальной попытки он работает нормально (в моих случаях).
После установки Cache-Control
как указано выше, все мои ссылки работали без проблем в IE8.