Search code examples
phpfileheaderxlsx

Download xlsx file using php


I need make xlsx file download from my site (but not from directly open file url like this: http://site.com/file.xlsx )

So, this is php code

        $file = "somefile.xlsx";
        header('Content-Description: File Transfer');
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment; filename='.basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        ob_clean();
        flush();
        readfile($file);

file is downloaded, his extension is .xlsx, but when trying open this file in ms excel, file not opened and I got error : excel cannot open the file.xlsx because the file format or file extension is not valid

Tell please, why this happened? where I am wrong?


Solution

  • After many years, I got same problem, and after searching, I got here again ))

    This is solution, that worked for me:

    $file = "somefile.xlsx";
    // define file $mime type here
    ob_end_clean(); // this is solution
    header('Content-Description: File Transfer');
    header('Content-Type: ' . $mime);
    header("Content-Transfer-Encoding: Binary");
    header("Content-disposition: attachment; filename=\"" . basename($file) . "\"");
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    readfile($file);