Bonjour tout le monde,
Je sèche sur une affaire bien embêtante...
J'ai une fonction qui marche bien sur les petits fichiers csv mais pas sur les gros, pour lesquels php me renvoi l'erreur suivante (ex : fichier de 8Mo) :Comment est-ce possible d'alloué 130Mo de mémoire pour lire un fichier de 8Mo ?Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes)
Voici ma fonction :
Je pense que le problème vient de la fonction fgetcsv et notamment de l'argument length :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 if (($handle = fopen($fichier, "r")) !== false) { $tmp = []; while (($data = fgetcsv($handle, 0, ";")) !== false) { // problème sur cette ligne $tmp[count($tmp)] = $data; } fclose($handle); $this->TAB = $tmp; }else{ $this->error[3] = 'Fichier non disponible'; }
Mais que faire si l'on est dans l'impossibilité d'anticiper le nombre de caractère par ligne de notre fichier ?Doit être plus grand que la plus grande ligne (en terme de caractères) à lire dans le fichier (y compris le caractère de fin de ligne). Ce paramètre est optionnel depuis PHP 5. Omettre ce paramètre (ou le définir à 0 en PHP 5.1.0 et suivant) fait que la longueur maximale de la ligne n'est pas limitée, ce qui est légèrement plus lent.
Quelqu'un pourrait-il m'aider à comprendre le fonctionnement sous-jacent à cette fonction ?
Merci d'avance pour votre aide !
Partager