Bonjour, j'ai un problème de gestion de cache avec laravel.
Sur mon application je récupère un gros (7mb) fichier .csv, j’ai tout le contenu en mémoire dans une variable $results, après j’insère chaque ligne dans ma base de donnée, en utilisant un code semblable à celui là:

foreach ($results as $row) {
    nom_du_modele::Create([
        'id'        =>  $row->id,
        'colonne1'      =>  $row->colonne1,
        'colonne2'      =>  $row->colonne2,
        'colonne3'      =>  $row->colonne3
    ]);
}

Le problème c'est que PHP s'arrête automatiquement après avoir inséré quelques 6500 lignes, ce qui est loin des 20.600 lignes de mon fichier. En vérifiant dans le log du serveur je découvre que PHP manque rapidement de mémoire, après presque 30 secondes d'utilisation il utlise les 128M de sa mémoire de cache et crash.
Augmenter la memory_limit ne servira à rien dans mon cas. Je cherche un moyen de mieux gérer la mémoire dans mon code, et peut être de l'optimiser.

Merci à tous ceux qui prendront 2 secondes de leur temps pour me proposer une solution.

============================

UPDATE
J'ai essayer en insérant :

DB::connection()->disableQueryLog();

au début mais ça n'a pas résolut le problème

2 réponses


Hassan Alami
Auteur
Réponse acceptée

merci Grafikart pour ta réponse, j'ai finalement utiliser un script qui me permet de lire les fichiers CSV en stream, au lieu de les charger en mémoire

Perso j'aurais tendance à découper en faisant X insert puis rafraichir la page pour en faire X nouveau, histoire de ne pas atteindre le max de mémoire