Maison  >  Article  >  développement back-end  >  Comment puis-je optimiser PHPExcel pour éviter l’épuisement de la mémoire lors du chargement de gros fichiers XLSX ?

Comment puis-je optimiser PHPExcel pour éviter l’épuisement de la mémoire lors du chargement de gros fichiers XLSX ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-19 13:58:02471parcourir

How Can I Optimize PHPExcel to Prevent Memory Exhaustion When Loading Large XLSX Files?

PHPExcel surcharge la mémoire lors du chargement de grandes feuilles de calcul

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.

Optimisation de l'utilisation de la mémoire PHPExcel

Pour résoudre ce problème, plusieurs techniques d'optimisation peuvent être utilisées :

Chargement sélectif de feuilles

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'
]);

Filtres de lecture

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());

Chunking

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);
}

Lecture des données uniquement

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);

Mise en cache des cellules

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.

Méthodes alternatives

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!

Déclaration:
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