Bryan
Bryan

Reputation: 1241

Download Excel File from Server has been corrupted - PHP

I have a problem about downloading Excel file from server.

the excel file was already saved on the server and I downloaded it using the code below.

if(file_exists($reportPath)){
    //content type
    header('Content-type: application/vnd.ms-excel');
    //open/save dialog box
    header('Content-Disposition: attachment; filename='.$dirFile[count($dirFile)-1]);
    //read from server and write to buffer
    readfile($reportPath);
}

But the downloaded file was corrupted.

I'm pretty sure that the file saved on the server is not corrupted since I have get it manually from the server to my local desktop.

Meaning, the data has been corrupted on the fly.

Please help, thank you, I'm using PHP

this is the file after downloaded

Upvotes: 1

Views: 3900

Answers (4)

Zenon
Zenon

Reputation: 1

This is what fixed my issue :

  • adding ob_end_clean funct after the save.
  • adding exit at the end of the script.

Upvotes: 0

Vaishnavi Aswale
Vaishnavi Aswale

Reputation: 225

    $fileName = "data.xls";
    $object_writer = PHPExcel_IOFactory::createWriter($object, 'Excel5');
    ob_end_clean();
    header("Content-Type: application/download");
    header('Content-Disposition: attachment;filename=' . $fileName);
    $object_writer->save('php://output');

use ob_end_clean() to clear the output buffer.

Upvotes: 0

Lepanto
Lepanto

Reputation: 1413

Download script should be separate file. Actually you should not print out anything in this script

//Add below to download the text file created
$filename = $file; //name of the file
$filepath = $file; //location of the file. I have put $file since your file is create on the same folder where this script is
header("Cache-control: private");
header("Content-type: application/force-download");
header("Content-transfer-encoding: binary\n");
header("Content-disposition: attachment; filename=\"$filename\"");
header("Content-Length: ".filesize($filepath));
readfile($filepath);
exit;

Upvotes: 1

Melvin
Melvin

Reputation: 5998

Can you try these headers?

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$dirFile[count($dirFile)-1].'"');
header('Cache-Control: max-age=0');

And see if it's working... Cheers!

Upvotes: 1

Related Questions