Bonjour à tous,
C'est pourtant pas la première fois que je génère des fichiers csv avec fpucsv(), mais dépassant 15000 lignes c'est une première...
Le problème (incompréhensible), est que je suis obligé de limiter la boucle dans laquelle fpucsv agit pour que la génération se déroule correctement.
Si le fichier généré devait dépasser 8ko, il est généré vide à 0.
Le contexte : je récupère dans une table des enregistrements qui peuvent aller jusqu'à 16000 lignes, en fonction des filtres définit par les utilisateurs.
Puis j'écris dans un fichier .csv ces résultats pour le télécharger immédiatement (un export quoi...)
J'ai d'abord pensé qu'un charactère spécial mettait le bazar, mais si je force la requête à exclure la ligne qui aurait dû être responsable, la génération se comporte toujours de la même façon, au-delà de 8Ko elle génère à 0 octet.
Voici un extrait de mon code
Précision : le contrôle avec les variables
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
24
25
26
27
28
29
30
31 $delimiteur = ';'; $fichier = fopen($chemin, 'w+'); //fputs($fichier, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) )); // première ligne fputcsv($fichier, $lignes_csv[0], $delimiteur); // lignes suivantes $taille = array(); for ($i=0;$i < $nb ;$i++){ $lignes_csv[$i] = array($row['UNIQUE_IDENTIFIER'][$i],$row['APPLICATION'][$i],$row['BASICAT_CODE'][$i],$row['ENTITES_SUPPORT'][$i],$row['ENTITES_EXPLOITANTE'][$i],$row['SERVICE_PRINCIPAL'][$i],$row['NIVEAUX_CHACO'][$i],$row['DEPARTEMENT_CAB'][$i],$row['EDS'][$i],$row['MODELE_CHANGE'][$i]); $saisie = fputcsv($fichier, $lignes_csv[$i], $delimiteur); if( $saisie == false){ var_dump("erreur à la ligne $i : ".$row['APPLICATION'][$i]); die(); } else{ $taille[] = $saisie; } } fclose($fichier); //var_dump(count($taille));die(); // fichier header("Pragma: nocache public"); header("Expires: 0"); header("Content-Type: text/csv"); header("Content-Length: $chemin"); header("Content-Disposition: attachment; filename=$file"); readfile($chemin); unlink($chemin);et
Code : Sélectionner tout - Visualiser dans une fenêtre à part $saisie
c'était juste pour vérifier que tout se passait bien... et à priori il n'y a pas d'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part $taille
Si quelqu'un a une idée lumineuse d'un truc qui m'a échappé ? Merci d'avance
Partager