Bonjour,

je dois effectuer un traitement (une sorte de diff) sur des fichiers csv dont la taille peut aller jusqu'à 20Mo. La lecture du fichier via file() prend entre 9 at 15 secondes. Quand je découpe (via explode) les lignes, PHP utilise plus de 600Mo de mémoire (c'est la limite que j'ai positionné dans PHP.ini). Je ne comprend pas bien pourquoi aussi l'un d'entre vous pourrait-il m'éclairer sur la question ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
echo 'Begin process<br/>';
flush();
$a = time();
$file = file("repository/SN1_20Mo.csv");
echo "time to read 20Mo file: ".(time() - $a)."<br/>";
flush();
 
$a = time();
$unrelevantLines = array();// il y a une dizaine de lignes (à peine quelque octets)
foreach($file as $key=>$line) {
   if(preg_match("/^[0-9a-z-A-Z]/", $line) != 0) {
      $file[$key] = explode(";", $line); // c'est ici que ça plante à un moment donné
   } else {
      array_push($unrelevantLines, $key);
   }
}
 
foreach($unrelevantLines as $index) {
   unset($line[$index]);
}
echo "time to read csv lines of this 20Mo file: ".(time() - $a)."<br/>";
flush();

Merci