Reputation: 1040
I just recently started using this library (the one from CodePlex), but I ran into some issues. My goal is to use it so I can process some data from multiple Excel files, and send such data to a database, per file. I'm doing something like:
foreach( $file_list as $file ) {
$book = PHPExcel_IOFactory::load( $path . $file );
}
So, inside the foreach I'm (for now) just showing the data to the user, but after five files, I get a memory error:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 50688 bytes) in /var/www/test/classes/PHPExcel/Shared/OLERead.php on line 76
Is there a way to __destruct the object after each file is loaded, so space is reserved (made free) for the next file, instead of accumulating it, or do you rather know of a reason and work-around for this?
Please let me know any suggestions you have.
Thanks in advance.
Upvotes: 4
Views: 2940
Reputation: 212412
The latest SVN code for PHPExcel (just checked in today) introduces cell caching to reduce memory usage... it's such a new feature, I haven't even had the time to document it yet. While the default method is identical to the present method, with the worksheet <--> cell relationship containing a cyclic reference, I believe that using any of the memory-reducing cache mechanisms should eliminate this cyclic reference. If not, let me know and I should be able to break the reference when unsetting a workbook/worksheet using some of the caching logic that already disables this connection when serializing the cells for caching.
Upvotes: 2
Reputation: 13009
This has been an issue for awhile, and it doesn't look like there's a way around it -- that is, unless someone has come up with something clever since the release of 5.3......
"...it seems that PHP 5.3 will fix this. However, I would like to see a confirmation of this somewhere." [Oct 21 2008]
(source) (more stuff)
Upvotes: 0