Intereting Posts
Получить результаты разбивки на страницы в Active Collab API Как я могу сделать этот код наведения короче? И как я могу создать файл css, который реализует настройки более чем на одну кнопку? PHP – удалить последний символ файла Доктрина Symfony Cache / orm / Proxies не открыла поток /Proxy/AbstractProxyFactory.php в строке 209 Вызовите Python из PHP и получите код возврата Тег DIV, создающий новую строку в php Как я могу получить параметры из Behat.yml в php-файл? Добавить WordPress jQuery в шаблон страницы Ошибка: разрешенный размер памяти 67108864 байт исчерпан Как интегрировать msg91 php api с Prestasms или Prestashop? Веб-сайт IIS не смог открыть поток: нет такого файла или каталога в C: \ inetpub \ vhosts \ ", но файл существует там ОШИБКА: SQLSTATE Никакое соединение не может быть сделано, потому что целевая машина активно отказалась от него Скрытие категории корней и отображение подкатегорий в качестве меню Приоритет PHP-оператора «Неопределенный порядок оценки»? Laravel не показывает index.php

Сгенерированный PHP файл Excel отличается при загрузке

У меня есть файл PHP, который генерирует файлы xls с помощью модуля, найденного по адресу http://pear.php.net/package/Spreadsheet_Excel_Writer/

Я могу создать образец документа очень хорошо, и когда я его открываю, он выглядит отлично.

Мой следующий шаг – превратить его в загружаемую ссылку. Для этого я сделал следующее:

$mimeType = "application/vnd.ms-excel"; $file_name = "test.xls"; $file_path = "/tmp/".$file_name; header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header('Content-Type: application/' . $mimeType); header('Content-Length: '.$size); header("Content-Disposition: attachment;filename=$file_name "); header("Content-Transfer-Encoding: binary "); // open the file in binary read-only mode // display the error messages if the file can´t be opened $file = & fopen($file_path, 'rb'); if ($file) { // stream the file and exit the script when complete fpassthru($file); exit; } else { echo $err; } 

Однако, когда я загружаю файл, он содержит много мусорных данных как в Excel, так и в OpenOffice. Дифф говорит, что тогда двоичный файл в папке / tmp и загруженном файле отличаются друг от друга. Я предполагаю, что это имеет какое-то отношение к заголовкам или fpassthru, но мне не очень повезло с отладкой проблемы.

Любые идеи о том, в чем проблема?

Related of "Сгенерированный PHP файл Excel отличается при загрузке"

Несколько заголовков Content-Type не требуются. Вы, по сути, говорите, что файл – это кекс, пицца и форд-телец в одно и то же время. Все, что вам нужно, это версия application/octet-stream , если вы не хотите использовать точный тип mime.

Кроме того, есть ли причина, по которой вы пытаетесь превратить дескриптор файла, возвращенный fopen() в ссылку?

Попробуйте что-то более простое:

 <?php header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment;filename=$file_name"); readfile("/tmp/test.xls"); exit(); ?> 

и посмотрим, улучшится ли это.

Просто убедитесь, что вы не отправляете НИЧЕГО в браузер до того, как будет отправлено фактическое содержимое файла.

Это может быть просто ошибка «php» или даже «уведомление», которую производит Spreadsheet_Excel_Writer, и вы даже не видите. Или это может быть закрывающий тег??>, За которым следует простое пространство или новая строка.

У меня была аналогичная ошибка, когда файл, созданный внутри веб-папок, работал. Однако доставка с использованием заголовка ('…') дала мне поврежденные файлы. Это было связано с одним пространством в конце одного файла php после закрытия тега «?>».

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

Решение. В следующих файлах удалите пробелы в конце файла или удалите тег ?> Закрытия в конце.

Файлы для редактирования (все файлы в Spreadsheet_Excel_Writer package ):

 Writer.php Workbook.php Worksheet.php PPS.php Parser.php OLE.php Parser.php File.php BIFFWriter.php Validator.php Root.php 

Добавьте следующий код вверху страницы, на которой генерируется файл excel

ob_clean ();

Это очистит все данные тарабарщины. Также проверяйте любые утверждения эха. Если присутствуют эхо-заявления, удалите их. Данные должны всегда отображаться в формате, указанном пакетом excel.