Position actuelle: Accueil> Derniers articles> Comment définir la longueur maximale d'un champ dans FGETCSV pour éviter le débordement des données?

Comment définir la longueur maximale d'un champ dans FGETCSV pour éviter le débordement des données?

gitbox 2025-06-20

Comment définir la longueur maximale d'un champ dans FGETCSV pour éviter le débordement des données?

Lors du traitement des fichiers CSV, FGETCSV () est une fonction très courante dans PHP, qui est utilisée pour lire les fichiers ligne par ligne et analyser les données sur chaque ligne. Lorsque la quantité de données dans un fichier CSV est très grande, vous pouvez rencontrer divers problèmes de traitement de ces données, dont l'une est le problème de débordement du champ. Cela signifie que la longueur de données de certains champs dépasse la plage attendue, ce qui fait que le programme ne traite pas correctement les données.

Pour éviter ce débordement, vous pouvez vous assurer que les données de chaque champ ne dépassent pas la limite définie en définissant la longueur maximale. Cet article présentera comment définir la longueur maximale d'un champ lors de l'utilisation de la fonction FGETCSV () , afin d'aider les développeurs à mieux contrôler le processus de lecture des fichiers CSV.

Introduction à la fonction fGetcsv ()

Tout d'abord, comprenons brièvement l'utilisation de base de la fonction FGETCSV () :

 <span><span><span class="hljs-title function_ invoke__">fgetcsv</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$delimiter</span></span><span> = </span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$enclosure</span></span><span> = </span><span><span class="hljs-string">'"'</span></span><span>, </span><span><span class="hljs-variable">$escape</span></span><span> = </span><span><span class="hljs-string">"\\"</span></span><span>);
</span></span>
  • $ Fichier : la ressource de fichier qui doit être lue.

  • $ Longueur : Spécifie la longueur maximale d'une rangée de données. Si les données de ligne dépassent cette longueur, FGETCSV () tronquera automatiquement. La valeur par défaut est 0, indiquant qu'il n'y a pas de limite sur la longueur.

  • $ Delimiter : le délimiteur de champ, par défaut, une virgule ( , ), et peut généralement être d'autres délimiteurs, tels que des onglets ( \ t ).

  • $ Enceinte : Le caractère de l'enceinte du champ, qui est de doubles devis ( " ), par défaut, est utilisé pour traiter les caractères spéciaux dans le domaine.

  • $ Escape : le caractère d'échappement, par défaut en arrière ( \ ), utilisé pour échapper aux caractères spéciaux sur le terrain.

Évitez le débordement du champ: définissez la longueur maximale du champ

Lors de la lecture d'un fichier CSV, si la longueur de certains champs dépasse la longueur maximale définie, FGETCSV () lira la partie extra-longue par défaut et le traitera. Pour éviter cela, vous pouvez limiter la longueur maximale de chaque ligne de données en définissant le paramètre de longueur $ .

1. Limite de longueur maximale de base

En définissant le paramètre $ longueur , nous pouvons contrôler le nombre maximum d'octets de chaque ligne de données lues. Cela garantit que chaque champ ne dépasse pas la longueur maximale prédéterminée. Par exemple, si vous souhaitez lire jusqu'à 1000 caractères par ligne de données, vous pouvez le définir comme ceci:

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'data.csv'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgetcsv</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-number">1000</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-comment">// Traiter les données pour chaque ligne</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span></span>

Dans cet exemple, la longueur de chaque ligne de données est limitée à 1000 caractères. Si les données sur une certaine ligne dépasse cette limite, FGETCSV () tronquera l'excès pour garantir que la longueur n'est pas dépassée.

2. Définir la limite de longueur du champ

Si vous souhaitez contrôler la longueur du champ plus granulaire, vous pouvez vérifier manuellement chaque champ après avoir lu chaque ligne de données et les tronquer au besoin. Par exemple, nous pouvons définir un tableau qui spécifie la longueur maximale de chaque champ:

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'data.csv'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-variable">$max_lengths</span></span><span> = [</span><span><span class="hljs-number">50</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>, </span><span><span class="hljs-number">200</span></span><span>]; </span><span><span class="hljs-comment">// Supposer que nous avons3Liste,La longueur maximale est limitée à50、100、200</span></span><span>

</span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgetcsv</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
        </span><span><span class="hljs-comment">// Couper les champs extra-longs</span></span><span>
        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>) &gt; </span><span><span class="hljs-variable">$max_lengths</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>]) {
            </span><span><span class="hljs-variable">$data</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>] = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$max_lengths</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>]);
        }
    }
    </span><span><span class="hljs-comment">// Traiter les données pour chaque ligne</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span></span>

Dans cet exemple, la longueur du champ est limitée à 50, 100 et 200 caractères, respectivement. Si le contenu du champ dépasse ces limites, la fonction substr () tronque le contenu à la longueur maximale autorisée.

Gérer les cas spéciaux dans les fichiers CSV

Dans une utilisation réelle, le format du fichier CSV peut ne pas être satisfaisant, certaines données peuvent avoir des caractères spéciaux tels que des ruptures de ligne, des onglets, etc., ou certains champs peuvent contenir des virgules et d'autres séparateurs. Dans ces cas, les paramètres de FGETCSV () peuvent être configurés pour s'assurer que les données peuvent être lues correctement et éviter le débordement.

1. Handle Line Breaks

FGETCSV () sautera automatiquement Newlines (sauf si le champ contient NewLines). Si vous rencontrez une situation dans laquelle le champ contient NewLines, vous pouvez gérer ces caractères en modifiant les paramètres d'échappement et de boîtier de fGetCSv () .

2. Champs de processus contenant des délimiteurs

Si le champ lui-même contient un délimiteur (comme une virgule), vous pouvez assurer l'intégrité du champ en définissant l'enceinte appropriée (telles que les doubles guillemets " . Il s'agit également d'une pratique standard au format CSV.

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'data.csv'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgetcsv</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-string">','</span></span><span>, </span><span><span class="hljs-string">'"'</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-comment">// Traiter les données pour chaque ligne</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span></span>

Résumer

En définissant la longueur maximale du champ dans la fonction fGetCSv () , nous pouvons éviter efficacement le problème du débordement des données. Qu'il s'agisse de régler la longueur maximale d'une ligne ou de tronquer manuellement chaque champ, des limites de longueur raisonnables peuvent garantir que le programme est plus stable et efficace lors de la lecture des fichiers CSV.

L'utilisation rationnelle du paramètre de longueur $ de fGetCSv () et la vérification de la longueur du champ peuvent éviter efficacement les problèmes de débordement de champ, améliorant ainsi la robustesse et la fiabilité du programme.