Вывод PHP Excel для IE дает пустой файл - PullRequest
2 голосов
/ 30 июня 2010

Я пытаюсь создать файл Excel с php. Это прекрасно работает в Firefox, но с IE я получаю только пустой файл. Вот что я делаю в основном:

header('Content-type: application/ms-excel');
header('Content-Disposition:  inline; attachment; filename='.$filename);
echo $data;

Я пробовал различные настройки заголовка, но безуспешно. Я также попытался вывести содержимое в виде текстового файла, тот же результат здесь. Нет содержимого в IE.

Есть идеи?

header("Cache-Control: no-stor,no-cache,must-revalidate");
header("Cache-Control: post-check=0,pre-check=0", false);
header("Cache-control: private");
header("Content-Type: application/octet-stream");
header('Content-Disposition:  inline; attachment; filename='.$filename);
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("Expires: 0");

-

header('Pragma: public'); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT'); 
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: pre-check=0, post-check=0, max-age=0');
header ("Pragma: no-cache"); 
header("Expires: 0"); 
header('Content-Transfer-Encoding: none'); 
header('Content-Type: application/vnd.ms-excel;');
header("Content-type: application/x-msexcel");
header('Content-Disposition:  inline; attachment; filename='.$filename);

Всего два варианта, также пробовал некоторые другие комбинации.

Спасибо, Roland

Ответы [ 2 ]

2 голосов
/ 30 июня 2010

Была такая же проблема: IE истекает через некоторое время, если он не получает ответ, даже если соединение TCP все еще открыто. Мне помогло следующее: отключить буферизацию вывода, отправить заголовки и очистить их. Отправляйте данные, когда они у вас есть. Этого было достаточно, чтобы держать соединение открытым.

Примерно так:

// reset all output buffering
while (ob_get_level() > 0) {
    ob_end_clean();
}
header('Content-type: application/ms-excel');
header('Content-Disposition:  inline; attachment; filename='.$filename);

// we can't send any more headers after this
flush();

$excel = new PhpExcel();
$excel->setActiveSheetIndex(0);
$sheet = $excel->getActiveSheet();
// in this example, $data was an array in the format row => value
//  data structure is not relevant to issue
foreach ($data as $key => $value) {
     // add data to sheet here
     $sheet->SetCellValue('A' . $key, $value);
     // etc...
}
$writer = new PHPExcel_Writer($excel);
// push to browser
$writer->save('php://output');
0 голосов
/ 30 июня 2010

Установите заголовок на header("Content-Type: application/octet-stream"); для принудительной загрузки.

или другая версия вашего заголовка добавляет vnd так application/vnd.ms-excel, но если вы отправляете этот заголовок, вы также должны отправить текущий заголовок рядом с ним, так как некоторые браузеры различаются.

...