Ich habe ein Skript, das eine kleine xls-Tabelle erzeugt (~ 25x15). Es enthält Prozentsätze und Zeichenfolgen und ich habe einen if-Operator, der die aktuelle Zelle als Prozentsatztyp mit diesem Code setzt:
%Vor%Aber wenn ich exportiere und die Datei anschaue, sehe ich, dass es nur ungefähr 20 Zellen Typ und Stil gesetzt hat. Und alle anderen sind mit Standardeinstellungen. Ich debuggte und erkannte, dass das Problem nicht in meiner Logik liegt. Ich lese über zunehmenden PHP-Cache-Speicher - versuchte es, aber es hat nicht funktioniert. Bitte helfen, weil ich mindestens 15 mal größere Tabelle exportieren muss. Vielen Dank im Voraus!
PHPExcel weist ziemlich viel Speicher zu
Während PHPExcel eine schöne Bibliothek ist, kann die Verwendung von PHP sehr viel Speicherplatz erfordern.
Laut diesem Thread können nur 5 Zellen 6 MB Speicherverbrauch rendern:
%Vor%Ein weiterer Benutzer ist sogar mit einer 256MByte-Speichereinstellung gescheitert .
Während PHPExcel Möglichkeiten bietet, seinen Speicherbedarf zu reduzieren, haben sich alle Reduzierungen in meinem Fall als zu klein herausgestellt. Diese Seite auf github enthält Einzelheiten zum Cache-Management von PHPExcel Optionen. Diese Einstellung serialisiert beispielsweise und die GZIPs die Zellstruktur eines Arbeitsblatts:
%Vor%PHPExcel's FAQ erklärt dies:
Fataler Fehler: Erlaubte Speichergröße von xxx Byte erschöpft (versucht, (yyy bytes zuweisen) in zzz in Zeile aaa
PHPExcel enthält eine "im Speicher" -Darstellung einer Tabellenkalkulation ist anfällig für die Speicherbeschränkungen von PHP. Der Speicher zur Verfügung gestellt zu PHP kann erhöht werden, indem man den Wert des memorylimit redigiert Anweisung in Ihrer php.ini-Datei oder mit iniset ('memory_limit', '128M') innerhalb Ihres Codes (ISP erlaubt);
Einige Leser und Autoren sind schneller als andere, und sie verwenden auch unterschiedliche Mengen an Speicher. Sie können einige Hinweise auf die finden relative Leistung und Speichernutzung für die verschiedenen Reader und Writer, über die verschiedenen Versionen von PHPExcel, hier Ссылка
Wenn Sie den Speicher bereits auf ein Maximum erhöht haben oder Ihre Speichergrenze, dann beschreibt diese Diskussion an der Tafel einige der Methoden, die angewendet werden können, um die Speichernutzung Ihrer Skripts zu reduzieren mit PHPExcel Ссылка
Messergebnisse für PHP Excel
Ich habe die PHPExcel-Beispieldatei [01simple.php][5]
instrumentiert und einige schnelle Tests durchgeführt.
Verbraucht 92 KByte :
%Vor%Verbraucht 4164 KBytes :
%Vor%Wenn man dieses Fragment mehrere Male unverändert ausführt, verbraucht jedes Fragment ungefähr 4 MB.
Die Überprüfung Ihrer App ist logisch korrekt
Um sicherzustellen, dass Ihre App logisch korrekt ist, würde ich vorschlagen, zuerst den PHP-Speicher zu erhöhen:
%Vor%In meinem Fall muss ich exportieren, um Ergebnisdaten einer Online-Bewertungsanwendung zu exportieren. Während es weniger als 100 Zellen horizontal gibt, muss ich bis zu mehreren 10.000 Zeilen exportieren. Während die Anzahl der Zellen groß war, enthält jede meiner Zellen eine Zahl oder eine Folge von 3 Zeichen - keine Formeln, keine Stile.
Bei starken Speicherbeschränkungen oder großen Tabellenkalkulationen
In meinem Fall hat keine der Cache-Optionen den Betrag so stark reduziert, wie nötig. Außerdem ist die Laufzeit der Anwendung enorm gewachsen.
Schließlich musste ich zu altmodischen CSV-Dateiexporten wechseln.
Ich habe Ihren Code lokal ausgeführt und festgestellt, dass alle 26 Zellen, die Sie für diesen Prozentsatz festgelegt haben, das richtige Format und ein% -Zeichen haben. Ich musste natürlich zuerst die Zeilen 136-137 auskommentieren.
Dies muss mit Ihrer Einrichtung zusammenhängen. Ich kann mir nicht vorstellen, dass Sie für eine Tabelle dieser Größe zu wenig Speicher hätten.
Zu Ihrer Information habe ich bestätigt, dass es mit PHP Version 5.4.16 mit php Excel Version 1.7.6, 2011-02-27 funktioniert hat. Ich habe die Tabelle mit MS Excel 2007 geöffnet.