Bonsoir,

je lis des gros fichiers CSV avec fgetcsv. Le problème, c'est que ces fichiers sont trop gros pour être lus d'un coup (je teste sur un fichier de 17 mO). (Si je tente fgetcsv sur le gros fichier, le script s'arrête en plein milieu). J'ai vu qu'une solution est de les découper en petits fichiers : https://gist.github.com/eric-pommere...f20694452ecd5e. J'ai testé le script sur mon gros fichier :
Code php : 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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
    $row_count_limit = 60000;
        $file_counter = 1;
        $file_name = 'C:\projets\ticket_rawsrc\csv\testicket\Trends_INC_Données_complètes_data septembre.';
        $file_ext = 'csv';
        $row = 1;
        $ctr = 0;
        $cols = array();
 
        echo "PHP CSV Chunker\n\n";
 
        $f = $file_name .
            $file_ext .
            "\n";
        echo "Ouverture du fichier source -> " .
            $file_name .
            $file_ext .
            "\n";
 
        if (
            ($handle_src = fopen("./$file_name" .
                ".csv",
                "r")) !==
            FALSE
        )
        {
 
            $cols = fgetcsv($handle_src,
                1000,
                ",");
 
            if (
                ($handle_dest = fopen("$file_name" .
                    $file_counter .
                    $file_ext,
                    "a+")) !==
                FALSE
            )
            {
                fputcsv($handle_dest,
                    $cols);
 
                while (($data = fgetcsv($handle_src,
                        1000,
                        ",")) !==
                    FALSE)
                {
                    $num = count($data);
                    fputcsv($handle_dest,
                        $data);
                    $row++;
 
                    if (
                        $row ==
                        $row_count_limit
                    )
                    {
                        fclose($handle_dest);
                        $row = 1;
                        echo "\t Création du fichier  --> " .
                            $file_name .
                            $file_counter .
                            $file_ext .
                            "\n";
                        $handle_dest = fopen("./$file_name" .
                            $file_counter .
                            $file_ext,
                            "a+");
                        $file_counter++;
                        fputcsv($handle_dest,
                            $cols);
 
                    }
                }
                fclose($handle_src);
            }
        }
        else
        {
 
        }
 
        echo "Fin du programme \n";
Mon souci est qu'il s'arrête au 1er fopen (lignes 19 à 24). Pensez-vous que ce script est valable ? Avez-vous une idée pour résoudre mon problème ? Y aurait-il une méthode plus adaptée ?