2012-01-26 4 views
1

donc je suis en train d'utiliser PHP pour lire un grand fichier csv (environ 64 000 entrées) et de la pile dans un grand tableaulecture d'un gros fichier csv en php, ne peut pas lire tous les fichiers

utilisant fopen() et fgetcsv, j'ai réussi à obtenir la plupart des lecture de fichiers, mais il arrête brusquement à l'entrée 51829 sans raison apparente

J'ai vérifié dans mon tableau et dans le CSV et les données se correctement importées, ligne 51829 dans le csv et dans le tableau sont les mêmes, etc ...

l'un de vous a une idée de pourquoi je ne peux pas lire tout le fichier?

Voici mon code ^^ Merci d'avance

$this->load->model('Import_model', 'import'); 
$this->import->clear_student_group(); 



//CHARGER LE CSV 
$row = 1; 
$data = array(); 
$file = "Eleve_Groupe_Mat.csv"; 
$lines = count(file($file)); 

if ($fp = fopen('Eleve_Groupe_Mat.csv', 'r')) { 
    $rownumber = 0; 
    while (!feof($fp)) { 
     $rownumber++; 
     $row = fgetcsv($fp); 
     $datarow = explode(";", $row[0]); 
     for($i = 0; $i <= 7; $i++) { 
      $dataset[$rownumber][$i] = $datarow[$i]; 
     } 
    } 
    fclose($fp); 
} 
$this->import->insert_student_group($dataset); 
+0

Il y a probablement un débordement. Essayez de découper votre fichier csv en plus petits morceaux pour surmonter cela. –

+1

mauvaise idée, le traiter en morceaux. –

+0

Est-ce que vous faites une vérification d'erreur dans 'insert_student_group'? Je ne pense pas que quiconque puisse vous aider sans plus d'informations à ce sujet. Avez-vous activé le rapport d'erreurs? –

Répondre

1

Votre script est probablement en cours d'exécution de mémoire. Vérifiez vos journaux d'erreurs ou activez le rapport d'erreurs pour confirmer. Pour que votre script fonctionne, vous pouvez essayer d'augmenter le memory_limit, ce qui peut être fait soit en php.ini soit en utilisant ini_set(). Mais une approche beaucoup mieux serait de ne pas stocker les données csv dans un tableau, mais de traiter chaque ligne comme vous l'avez lu. Cela réduit l'empreinte mémoire et réduit le besoin d'augmenter le memory_limit.

1

Vous utilisez toute la mémoire dont dispose PHP. Un fichier aussi gros ne peut pas tenir dans la mémoire, surtout pas en PHP, qui stocke beaucoup de données supplémentaires avec chaque variable créée.

Vous devez lire un nombre limité de lignes, disons 100, puis traiter les lignes que vous avez lues et les supprimer. Lisez ensuite les 100 lignes suivantes et répétez le processus jusqu'à ce que vous ayez traité le fichier entier.

1

Je pense que Fopen a des restrictions sur la lecture des fichiers. Essayez d'utiliser file_get_contents();

Questions connexes