【问题标题】:PhpSpreadsheet corrupted xlsx filePhpSpreadsheet 损坏的 xlsx 文件
【发布时间】:2020-01-03 22:01:27
【问题描述】:

我在尝试下载 xlsx 文件时遇到问题。当我在本地测试它时它工作得很好,但是当我将它上传到生产服务器时,文件被损坏了。

这是文件输出:

这是我正在使用的代码:

<?php

    require 'conn.php';
    require 'vendor/autoload.php';

    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
    use PhpOffice\PhpSpreadsheet\IOFactory;


    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
    $sheet->setCellValue('A1', '#');
    $sheet->setCellValue('B1', 'First');
    $sheet->setCellValue('C1', 'Last');
    $sheet->setCellValue('D1', 'Handle');

    header('Content-Type: application/vnd.openxmlformats- 
    officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="text.xlsx"');
    header('Cache-Control: max-age=0');
    $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
    $writer->save('php://output');
    die;

我尝试将标题更改为,但没有帮助:

header('内容类型:application/vnd.ms-excel');

【问题讨论】:

  • 检查文件编码,在我看来是错误的,无论是在创建文件时还是在打开时。

标签: php xlsx xls phpspreadsheet


【解决方案1】:

我有同样的症状,是因为网络服务器在做之后继续输出东西

$writer->save('php://output');

就我而言,在它之后执行die() 是可行的,问题就消失了。 也许它可以节省一些时间。

【讨论】:

    【解决方案2】:

    我认为如果你在调用 createWriter 静态方法之前添加对输出缓冲区的清理就可以了。

    ob_end_clean();
    $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
    $writer->save('php://output');
    

    【讨论】:

    • 添加 ob_end_clean() 解决了我的问题
    猜你喜欢
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2018-01-10
    相关资源
    最近更新 更多