Consommation de mémoire dans PHPExcel
Malgré la taille de fichier apparemment importante de la table XSLX (3 Mo), PHPExcel ne parvient pas à la charger en raison de mémoire insuffisante. Ce problème provient de la représentation « en mémoire » utilisée par PHPExcel pour les données de la feuille de calcul, ce qui la rend sensible aux limites de mémoire PHP.
Facteurs influençant l'utilisation de la mémoire
La taille physique du fichier n'a pas d'importance par rapport au nombre de cellules (lignes x colonnes) dans la feuille de calcul. En règle générale, environ 1 Ko de mémoire est requis par cellule. Ainsi, un classeur de 5 millions de cellules nécessiterait environ 5 Go de mémoire.
Techniques d'optimisation de la mémoire
Pour optimiser l'utilisation de la mémoire, plusieurs techniques peuvent être utilisées :
1. Limitation des feuilles de calcul :
Si plusieurs feuilles de calcul sont présentes mais que toutes ne sont pas nécessaires, utilisez la méthode setLoadSheetsOnly() pour spécifier quelles feuilles de calcul doivent être chargées.
2. Utilisation des filtres de lecture :
Définissez une classe de filtre de lecture implémentant PHPExcel_Reader_IReadFilter pour lire uniquement les cellules spécifiques d'intérêt, réduisant ainsi l'empreinte mémoire.
3. Lecture de morceaux :
Lisez le classeur par « morceaux » afin qu'un seul morceau soit chargé en mémoire à la fois à l'aide de filtres de lecture.
4. Définissez readDataOnly :
Activez cette option pour charger uniquement les valeurs des cellules, en ignorant les informations de formatage, ce qui peut réduire considérablement la consommation de mémoire.
5. Mise en cache des cellules :
Stockez les objets de cellule dans un format compressé ou en dehors de la mémoire de PHP pour minimiser la mémoire requise par cellule.
Problème potentiel dans le code
En plus de ces techniques d'optimisation, il convient de noter l'utilisation d'itérateurs dans votre code, qui peuvent être moins efficaces. Pensez plutôt à utiliser les méthodes toArray() ou rangeToArray() fournies par PHPExcel pour obtenir des tableaux de données cellulaires.
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!