From 37e697b73fba643824912eb10a2da5a72d02879e Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Wed, 23 Jan 2019 13:25:41 +0000 Subject: [PATCH] Fix overzealous cleanup of temporary files. By cleaning up the temporary files on close() we can no longer call getData() which breaks pretty much everything except when not using temporary files at all. This was introduced in 6f5b44cd6b8 --- Spreadsheet/Excel/Writer/Workbook.php | 2 +- Spreadsheet/Excel/Writer/Worksheet.php | 28 ++++++++++++++------------ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/Spreadsheet/Excel/Writer/Workbook.php b/Spreadsheet/Excel/Writer/Workbook.php index 3c779ec..9e8e567 100644 --- a/Spreadsheet/Excel/Writer/Workbook.php +++ b/Spreadsheet/Excel/Writer/Workbook.php @@ -604,7 +604,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri $total_worksheets = count($this->_worksheets); for ($i = 0; $i < $total_worksheets; $i++) { - while ($tmp = $this->_worksheets[$i]->getData()) { + while ($tmp = $this->_worksheets[$i]->getData(true)) { $OLE->append($tmp); } } diff --git a/Spreadsheet/Excel/Writer/Worksheet.php b/Spreadsheet/Excel/Writer/Worksheet.php index b70603b..3251649 100644 --- a/Spreadsheet/Excel/Writer/Worksheet.php +++ b/Spreadsheet/Excel/Writer/Worksheet.php @@ -652,16 +652,6 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr $this->_storeDataValidity(); }*/ $this->_storeEof(); - - if ( $this->_tmp_file != '' ) { - if ( $this->_filehandle ) { - fclose($this->_filehandle); - $this->_filehandle = ''; - } - @unlink($this->_tmp_file); - $this->_tmp_file = ''; - $this->_using_tmpfile = true; - } } /** @@ -682,7 +672,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr * * @return string The data */ - public function getData() + public function getData($cleanup = true) { $buffer = 4096; @@ -690,9 +680,8 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr if (isset($this->_data)) { $tmp = $this->_data; unset($this->_data); - $fh = $this->_filehandle; if ($this->_using_tmpfile) { - fseek($fh, 0); + fseek($this->_filehandle, 0); } return $tmp; } @@ -701,6 +690,19 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr if ($tmp = fread($this->_filehandle, $buffer)) { return $tmp; } + + // All data has now been read (both from memory & from file) so we + // can now trash the file + if ($cleanup) { + if ( $this->_filehandle ) { + fclose($this->_filehandle); + $this->_filehandle = ''; + } + @unlink($this->_tmp_file); + $this->_tmp_file = ''; + $this->_using_tmpfile = false; + $this->_datasize = 0; + } } // No data to return