diff --git a/Spreadsheet/Excel/Writer/Workbook.php b/Spreadsheet/Excel/Writer/Workbook.php index c4e66bf..63eb839 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