Maison > développement back-end > tutoriel php > Partager des exemples de résolution de fuites de mémoire PHPExcel

Partager des exemples de résolution de fuites de mémoire PHPExcel

*文
Libérer: 2023-03-18 11:54:01
original
1909 Les gens l'ont consulté

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;
     }
 }
Copier après la connexion


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;
     }
 }
Copier après la connexion


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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal