In diesem Artikel wird hauptsächlich die Lösung für das Speicherleckproblem von PHPExcel vorgestellt. In diesem Artikel werden zunächst die Gründe für den Speicherverlust erläutert. Anschließend können sich bedürftige Freunde auf
Verwenden Sie PHPExcel zum Generieren beziehen Excel-Dokumente verbrauchen mehr Speicher. Manchmal kann es notwendig sein, die großen Datenmengen durch eine Schleife in mehrere kleine Excel-Dokumente aufzuteilen, um sie zu speichern, um eine Speichererschöpfung zu vermeiden.
PHPExcel verfügt jedoch über Zirkelverweise (anscheinend wurde dieses Problem in der neuesten Version 1.6.5 nicht gelöst, wenn PHPExcel- und PHPExcel_Writer_Excel5-Objektinstanzen während einer http-Anfrage wiederholt erstellt werden, um mehrere Excel-Dokumente zu vervollständigen). Bei einem Generierungsvorgang können nicht alle erstellten Objektinstanzen rechtzeitig vor dem Ende der HTTP-Anforderung freigegeben werden, was zu einem Speicherverlust führt.
Die Lösung besteht darin, Methoden in der PHPExcel_Worksheet-Klasse hinzuzufügen:
public function Destroy() { foreach($this->_cellCollection as $index => $dummy) { $this->_cellCollection[$index] = null; } }
und Methoden in der PHPExcel-Klasse hinzuzufügen:
public function Destroy() { foreach($this->_workSheetCollection as $index => $dummy) { $this->_workSheetCollection[$index]->Destroy(); $this->_workSheetCollection[$index] = null; } }
Dann rufen Sie explizit PHPExcel::Destroy() auf, wo Ressourcenrecycling erforderlich ist, um das Zirkelverweisproblem zu lösen. Beachten Sie, dass die Methode __destruct() nur aufgerufen wird, wenn das Objekt als zur Freigabe bereit gilt, sodass die Verarbeitung von Zirkelverweisen in __destruct() nicht erfolgen kann.
Verwandte Lektüre:
Thinkphp5+PHPExcel implementiert Batch-Upload-Tabellendaten function_php example
Einführung in die Methode zum Einfrieren und Sperren von Headern in PHPExcel
Freigabe der Methode zum Exportieren von Excel-Dateien durch PHPExcel im Yii2-Framework
Das obige ist der detaillierte Inhalt vonTeilen Sie Beispiele für die Lösung von PHPExcel-Speicherlecks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!