Cet article présente principalement la solution au problème de fuite de mémoire de PHPExcel. Cet article explique d'abord les raisons de la fuite de mémoire, puis donne la solution. Les amis dans le besoin peuvent se référer à
Utiliser PHPExcel pour générer. Les documents Excel consomment plus de mémoire. Parfois, il peut être nécessaire de diviser les données volumineuses en plusieurs petits documents Excel via une boucle et de les enregistrer pour éviter l'épuisement de la mémoire.
Cependant, PHPExcel a des références circulaires (il semble que ce problème n'ait pas été résolu dans la dernière version 1.6.5). Si les instances d'objet PHPExcel et PHPExcel_Writer_Excel5 sont construites à plusieurs reprises lors d'une requête http pour compléter plusieurs documents Excel dans le En cas d'opération de génération, toutes les instances d'objet construites ne peuvent pas être libérées à temps avant la fin de la requête http, provoquant ainsi une fuite mémoire.
La solution est d'ajouter des méthodes dans la classe PHPExcel_Worksheet :
public function Destroy() { foreach($this->_cellCollection as $index => $dummy) { $this->_cellCollection[$index] = null; } }
et d'ajouter des méthodes dans la classe PHPExcel :
public function Destroy() { foreach($this->_workSheetCollection as $index => $dummy) { $this->_workSheetCollection[$index]->Destroy(); $this->_workSheetCollection[$index] = null; } }
Appelez ensuite explicitement PHPExcel::Destroy() où le recyclage des ressources est nécessaire pour gérer le problème de référence circulaire. Notez que la méthode __destruct() ne sera appelée que lorsque l'objet est considéré comme prêt à être publié, le traitement des références circulaires ne peut donc pas être effectué dans __destruct().
Lecture connexe :
Thinkphp5+PHPExcel implémente l'exemple function_php de données de table de téléchargement par lots
Introduction à la méthode de gel et de verrouillage des en-têtes dans PHPExcel
Partage de la méthode d'export de fichiers Excel par PHPExcel dans le framework Yii2
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!