2016-07-07 3 views
3

Ich habe einige Speicherprobleme beim Schreiben von xls (xlsx) -Dateien mit PhpExcel. Ich habe versucht, den Cache zu verwenden, aber es scheint nicht zu funktionieren, wenn ich neue Dokumente schreibe.PHPExcel: Cache konnte nicht während des Schreibens verwendet werden

$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp; 
$cacheSettings = array('memoryCacheSize' => '8MB' 
       ); 
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); 

Nach einer Bibliothek Update auf die aktuelle Version (v1.8.1) das Problem haben sich ein wenig verbessert, aber ich bin in der Lage noch und nur eine Datei mit 8 Spalten Export vorbereiten und 15.000-20.000 Reihen (20000 Zeilen mit cache_in_memory_gzip) ohne das Speicherlimit zu erhöhen. Leider ist das in meinem Fall keine ausreichende Lösung.

Cache-Methode kann mir vielleicht erlauben, weitere Einträge voraus vorzubereiten, aber während der eigentlichen Schreibmethode scheint nichts zu bedeuten.

$file = new PHPExcel(); 
    // Prepare data ... 
    $writer = PHPExcel_IOFactory::createWriter($file, 'Excel2007'); 
    $writer->save($pathname); // More memory required 
+0

Aktivieren Sie das Caching ___before___, das das neue PHPExcel-Objekt instanziiert? –

+0

Und vergessen Sie nicht, dass Caching keine magische Kugel ist, die Speicherbeschränkungen vollständig beseitigt; selbst mit Caching gibt es immer noch etwas Speicheraufwand, und verschiedene Caching-Optionen werden variieren, um den Overhead zu reduzieren –

+0

Ich setze den Cache so schnell wie möglich. Die Cache-Methode kann mir vielleicht erlauben, mehr Einträge vorher vorzubereiten, aber während der eigentlichen Schreibmethode scheint nichts zu interessieren. Zu Testzwecken verwende ich keine Daten aus der Datenbank und ich verwende einige voreingestellte Dummy-Daten und for-Schleife. Beim Testen mit Daten aus der Datenbank habe ich meistens die gleichen Ergebnisse (beachte, dass ich mit 5000 Zeilen Schritten teste). – Wolfer

Antwort

1

Am Ende haben wir auf box/spout gewechselt. Ich kann nicht behaupten, dass ich seine vollen Fähigkeiten getestet habe, aber ich habe nach 800 000 Reihen gelangweilt.

+0

Box/Auslauf kann derzeit (** 2016-08-04 **) einige Styling- und Exportoptionen vermissen. In diesem Fall waren jedoch der Speicherbedarf und die Anzahl der Zeilen entscheidend. – Wolfer