Malgré 1 024 Mo de RAM alloués, PHPExcel rencontre toujours un épuisement de la mémoire lors du chargement d'un fichier XSLX de 3 Mo. La cause première réside dans le processus gourmand en mémoire impliqué dans la représentation de grandes feuilles de calcul.
Pour résoudre ce problème, plusieurs techniques d'optimisation peuvent être utilisées :
Si seules des feuilles de calcul spécifiques doivent être chargées, utilisez setLoadSheetsOnly() pour limiter le nombre de feuilles lues par le lecteur.
$objReader->setLoadSheetsOnly([ 'Data Sheet #1', 'Data Sheet #3' ]);
Pour récupérer uniquement des cellules ou des lignes spécifiques, un filtre de lecture peut être utilisé.
class MyReadFilter implements PHPExcel_Reader_IReadFilter { // ... implementation } $objReader->setReadFilter(new MyReadFilter());
La lecture de grandes feuilles de calcul en morceaux peut minimiser l'empreinte mémoire en chargeant uniquement une partie des données à une fois.
$chunkSize = 20; $chunkFilter = new chunkReadFilter(); for ($startRow = 2; $startRow < 65536; $startRow += $chunkSize) { $chunkFilter->setRows($startRow, $chunkSize); $objPHPExcel = $objReader->load($inputFileName); }
Le réglage de readDataOnly sur true charge uniquement les valeurs des cellules sans formater les données, réduisant ainsi l'utilisation de la mémoire.
$objReader->setReadDataOnly(true);
La mise en cache des cellules stocke les objets cellulaires dans un format compressé, réduisant considérablement la consommation de mémoire mais sacrifiant la vitesse.
Au lieu d'utiliser des itérateurs et de créer manuellement un tableau, envisagez d'utiliser toArray de PHPExcel () ou rangeToArray() pour une génération efficace de tableaux.
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!