PHP xlsx header

так что это работает:

myphpfile.php:

<code><?php
header('Content-disposition: attachment; filename=myfile.pdf');
header('Content-type: application/pdf');
readfile('myfile.pdf');
?> 
</code>

этот php файл вызывается здесь, и загрузка в PDF работает нормально:

<code><a class = "oglasavanje" href = "../../cjenik/myphpfile.php">download</a><br/>
</code>

но это не работает:

<code><?php
header('Content-disposition: attachment; filename=myfile.xlsx');
header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
readfile('myfile.xlsx');
?>
</code>

оба файла .pdf и .xlsx находятся в одной папке. Когда я нажимаю на кнопку «скачать» Появится окно загрузки ссылок, я сохраню файл, но файл не может быть открыт. Это дает мне следующую ошибку:

Excel cannot open the file 'myfile.xlsx' because the file format or file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file.

Файл открывается нормально, когда я открываю его вручную (то есть, не загружая его по ссылке)

Я использую WAMP, если это важно.

Любая помощь приветствуется.

--- РЕДАКТИРОВАТЬ ---

Я нашел этот фрагмент кода на php.net:

<code>ob_clean();
flush();
</code>

итоговый код выглядит следующим образом:

<code>$file = "myfile.xlsx";
header('Content-disposition: attachment; filename='.$file);
header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Length: ' . filesize($file));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
ob_clean();
flush(); 
readfile($file);
</code>

Спасибо всем за ответы.

 user108649817 апр. 2012 г., 22:24
Вы рассчитываете и отправляете размер файла?
 GTCrais17 апр. 2012 г., 22:37
Я не рассчитал и не отправил размер файла (и я не знаю, как это сделать). Это терпит неудачу в Firefox.
 user108649817 апр. 2012 г., 22:43
Вы читаете файл и считаете байты. Ниже парень, который говорит о некоторых других заголовках, которые могут помочь.
 user108649817 апр. 2012 г., 22:26
Кроме того, полезно знать, в каких браузерах это терпит неудачу. Известно, что IE имеет некоторые проблемы с загрузкой файлов некоторых типов в некоторых условиях.

Ответы на вопрос(3)

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save($filename);
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Length: ' . filesize($filename));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
readfile($filename);
return;

Это решение работает для меня, но когда я пытаюсь открыть загруженный файл, я получаю сообщение об ошибке. Для .pdf файл просто пуст.

В зависимости от вашего веб-браузера имя файла может не сохраняться полностью с периодами. Если имя файла является неполным, вы можете попробовать заменить этот заголовок:

header('Content-disposition: attachment; filename=myfile.xlsx');

с

$filename = "myfile.xlsx";
header('Content-Disposition: attachment; filename="' . $filename . '"');

Зависит от ваших браузеров, так много вещей может вызвать такое поведение, напримерContent-length , Cache-Control так далее

Также изменить

Content-type вContent-Type

Content-disposition вContent-Disposition

Пытаться

$file = "myfile.xlsx" ;
header('Content-Disposition: attachment; filename=' . $file );
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Length: ' . filesize($file));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
readfile('myfile.xlsx');
 GTCrais17 апр. 2012 г., 22:54
Ошибка объяснена в оригинальном посте. Тем временем я понял это.
 17 апр. 2012 г., 22:51
Объясните .. что вы имеете в виду, что это не сработало? что именно ошибка, которую вы получаете .... только что проверил это работает здесь

Ваш ответ на вопрос