Экспорт поврежденного файла phpexcel в браузер: обнаружена проблема с некоторым содержимым - PullRequest
0 голосов
/ 07 марта 2019

У меня проблемы с открытием экспортированного файла Excel.

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

Это работало без проблем на моемлокальный компьютер.

Но такая же проблема произошла на сервере.

Вот что я сделал ранее:

    // Save Excel 2007 file
    $lsFileName = isset($file_name) && $file_name != null ? $file_name.'.xlsx' : 'Report.xlsx';
    $upload_dir = "upload/export_dump/";

    if(is_dir($upload_dir) == false) {
        mkdir($upload_dir, 0777);
    }

    $lsSavePath = $upload_dir.$lsFileName;

    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    $objWriter->setIncludeCharts(TRUE);
    $objWriter->save($lsSavePath);

    $lnFilesize = filesize($lsSavePath);

    // Redirect output to a client’s web browser (Excel2007)
    header('Content-Type: application/force-download');
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header("Content-Disposition: attachment; filename=" . utf8_decode($lsFileName));
    header('Content-Transfer-Encoding: binary');
    header('Accept-Ranges: bytes');
    header('Cache-Control: max-age=0');
    header("Content-Length:" . $lnFilesize);
    readfile($lsSavePath);

РЕДАКТИРОВАТЬ: я пытался проверить, были ли какие-либо выводы сделаны док чтению файла.

    .
    .
    header("Content-Length:" . $lnFilesize);
    $output = ob_get_contents();
    if(!empty($output)) {
        var_dump($output);
        die('Something was definitely printed!');
    } else {
        readfile($lsSavePath);    
    }

Но файл загружается, и появляется такое же сообщение о восстановлении.

ПРИМЕЧАНИЕ. При загрузке файла с самого сервера (не через браузер) и открытиифайл, нет проблем.

...