При работе с классом PhpExcel, при формировании xls документа используется следующая конструкция:
//создаем объект класса-писателя
include("PhpExcel/Classes/PHPExcel/Writer/Excel5.php");
$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
//выводим заголовки
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=".$this -> smInfo['smNum'].".xls");
header('Cache-Control: max-age=0');
//выводим в браузер таблицу с бланком
$objWriter->save('php://output');
Возникла проблема, т.к. скрипт выполняется, грубо говоря, в середине страницы, следовательно блок headers() выдает ошибку "Cannot modify header information ..." и далее по-тексту :)
Попытался поизвращаться и заменил раздел
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=".$this -> smInfo['smNum'].".xls");
header('Cache-Control: max-age=0');
на
echo "<meta http-equiv='Content-Type' CONTENT='application/vnd.ms-excel'>";
echo "<meta http-equiv='Content-Disposition' CONTENT='attachment; filename=".$this -> smInfo['smNum'].".xls'>";
echo "<meta http-equiv='Cache-Control' CONTENT='max-age=0'>";
Ошибка, есессно, пропала, но и стандартный диалог загрузки файла (где спрашивают "Открыть", "Сохранить" и т.п.) не появляется, а на страницу выводятся кракозяблины.
Поправьте плз, что не так делаю.
Заранее благодарю!
з.ы. Возгласы "нутииламир!!!!111", кидание помидорами и просто флуд приветствуются :)
Спустя 1 минута, 54 секунды (29.09.2011 - 16:53) inpost написал(а):
Заголовок в начало страницы пропиши.
Спустя 21 минута, 12 секунд (29.09.2011 - 17:14) bobo написал(а):
Было бы все так просто, тему бы не создавал. Не получится функцию на самый верх вынести, как решить задачу другими путями ?
Спустя 39 секунд (29.09.2011 - 17:15) inpost написал(а):
что значит ЗАГОЛОВОК нельзя вверх? Заголовок на то и заголовок, что он должен первым передаваться, а потом всё остальное.
Спустя 26 минут, 35 секунд (29.09.2011 - 17:42) bobo написал(а):
Так в функции перед заголовками нечего и не передается, сама функция вызывается в <body></body>, в самый верх html разметки эту функцию вынести не получится
Вариант с <meta> чем плох ?
Вариант с <meta> чем плох ?
Спустя 16 минут, 47 секунд (29.09.2011 - 17:58) inpost написал(а):
"Cannot modify header information " - вывод текста ДО заголовков, или UTF with BOM, который надо отключить.
<body><head> - это содержание страницы, чтобы браузер понял, что <body> - это разметка или обычный текст - надо передать заголовки, поэтому заголовки передаются в самом начале.
<body><head> - это содержание страницы, чтобы браузер понял, что <body> - это разметка или обычный текст - надо передать заголовки, поэтому заголовки передаются в самом начале.
Спустя 39 минут, 2 секунды (29.09.2011 - 18:37) Zerstoren написал(а):
ob_start, ob_get_contents
вам в зубы и php.net в браузер
вам в зубы и php.net в браузер