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

Susan Sarandon
Libérer: 2024-11-19 13:58:02
original
468 Les gens l'ont consulté

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'
]);
Copier après la connexion

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

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

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal