I have generated xmlx file and I am able to save it and provide it for the user via:
$writer->save('hello world.xlsx');
header('Location: hello world.xlsx');
However, then the file remains on the hard drive. I need to get rid of it as it is a security threat.
I tried unlinking the file
unlink('hello world.xlsx');
but that deletes the file too early so the user doesn't have access to it.
If it can work with unlink then I need to be sure the file will be deleted (so proper using of die();
and such)
EDIT: It is not only for security reasons anymore. The provider doesn't allow saving files so it is the only way to go.
Use composer to install PhpSpreadsheet into your project. Or also download the documentation and samples if you plan to use them. A good way to get started is to run some of the samples. Don't forget to download them via --prefer-source composer flag.
Read an Excel File (XLSX) Open the XSLX file with $reader->open($path) Browse each Sheet of the spreadsheet with $reader->getSheetIterator() Browse each Row of the Sheet with $sheet->getRowIterator() Browse each Cell of the Row with $row->getCells()
Use php://output
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="file.xls"');
$writer->save("php://output");
You could send the file directly after its creation, instead of the redirect to the file.
$filename = 'hello world.xlsx';
$writer->save($filename);
// Set the content-type:
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Length: ' . filesize($filename));
readfile($filename); // send file
unlink($filename); // delete file
exit;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With