Aktueller Standort: Startseite> Neueste Artikel> Wie setzen Sie die maximale Länge eines Feldes in fGetCSV ein, um Datenüberlauf zu vermeiden?

Wie setzen Sie die maximale Länge eines Feldes in fGetCSV ein, um Datenüberlauf zu vermeiden?

gitbox 2025-06-20

Wie setzen Sie die maximale Länge eines Feldes in fGetCSV ein, um Datenüberlauf zu vermeiden?

Bei der Verarbeitung von CSV -Dateien ist fGetCSV () eine sehr häufige Funktion in PHP, mit der Dateien Zeile nach Zeile gelesen und Daten in jeder Zeile analysiert werden. Wenn die Datenmenge in einer CSV -Datei sehr groß ist, können Sie mit der Verarbeitung dieser Daten auf verschiedene Probleme stoßen, von denen eines das Problem des Feldüberlaufs ist. Dies bedeutet, dass die Datenlänge einiger Felder den erwarteten Bereich überschreitet, wodurch das Programm die Daten nicht korrekt verarbeitet.

Um diesen Überlauf zu vermeiden, können Sie sicherstellen, dass die Daten für jedes Feld die festgelegte Grenze nicht überschreiten, indem die maximale Länge festgelegt wird. In diesem Artikel wird vorgestellt, wie die maximale Länge eines Feldes bei Verwendung der Funktion fGetCSV () festgelegt wird, um den Entwicklern zu helfen, den Leseprozess von CSV -Dateien besser zu steuern.

Einführung in die Funktion fGetCSV ()

Lassen Sie uns zunächst kurz die grundlegende Verwendung der Funktion fGetCSV () verstehen:

 <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>
  • $ Datei : Die Dateiressource, die gelesen werden muss.

  • $ Länge : Gibt die maximale Länge einer Datenreihe an. Wenn die Zeilendaten diese Länge überschreiten, wird FGetCSV () automatisch abgeschnitten. Der Standardwert beträgt 0, was angibt, dass die Länge keine Grenze gibt.

  • $ delimiter : Das Feld Grenzwerter, standardmäßig ein Komma ( , ) und kann normalerweise andere Grenzwerte wie Registerkarten ( \ t ) sein.

  • $ Gehege : Das Gehäusecharakter des Feldes, das doppelte Zitate ( " ) standardmäßig ist, wird verwendet, um Sonderzeichen im Feld zu verarbeiten.

  • $ Escape : Escape -Charakter, standardmäßig nach Backslash ( \ ), verwendet, um Sonderzeichen im Feld zu entkommen.

Feldüberlauf vermeiden: Stellen Sie die maximale Feldlänge ein

Wenn die Länge einiger Felder die maximale Länge der festgelegten Felder überschreitet, lesen Sie beim Lesen einer CSV-Datei den extra langen Teil standardmäßig und verarbeiten Sie es. Um dies zu vermeiden, können Sie die maximale Länge jeder Datenzeile durch Einstellen des Parameters $ Länge einschränken.

1. Maximale Längengrenze grundlegend

Durch Einstellen des Parameters $ Länge können wir die maximale Anzahl von Bytes jeder Datenreihe steuern. Dies stellt sicher, dass jedes Feld die vorgegebene maximale Länge nicht überschreitet. Wenn Sie beispielsweise bis zu 1000 Zeichen pro Datenzeile lesen möchten, können Sie es so festlegen:

 <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">// Prozessdaten für jede Zeile verarbeiten</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>

In diesem Beispiel ist die Länge jeder Datenreihe auf 1000 Zeichen begrenzt. Wenn die Daten in einer bestimmten Zeile diese Grenze überschreiten, schneidet FGetCSV () den Überschuss ab, um sicherzustellen, dass die Länge nicht überschritten wird.

2. Setzen Sie die Feldlängengrenze

Wenn Sie die Länge des Feldes körniger steuern möchten, können Sie jedes Feld manuell überprüfen, nachdem Sie jede Datenreihe gelesen und nach Bedarf abschneiden. Zum Beispiel können wir ein Array festlegen, das die maximale Länge jedes Feldes angibt:

 <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">// Angenommen, wir haben3Liste,Die maximale Länge ist begrenzt auf50、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">// Schneiden Sie extra lange Felder ab</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">// Prozessdaten für jede Zeile verarbeiten</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>

In diesem Beispiel ist die Länge des Feldes auf 50, 100 bzw. 200 Zeichen begrenzt. Wenn der Inhalt des Feldes diese Grenzen überschreitet, schneidet die Funktion substr () den Inhalt auf die maximal zulässige Länge ab.

Bearbeiten Sie spezielle Fälle in CSV -Dateien

Im tatsächlichen Gebrauch ist das Format der CSV -Datei möglicherweise nicht zufriedenstellend. Einige Daten haben möglicherweise Sonderzeichen wie Zeilenpausen, Registerkarten usw. oder einige Felder können Kommas und andere Separatoren enthalten. In diesen Fällen können die Parameter von fGetCSV () weiter konfiguriert werden, um sicherzustellen, dass die Daten korrekt gelesen und Überlauf vermeiden können.

1. Handleitungsbrüche

fGetCSV () überspringt automatisch Neuleitungen (es sei denn, das Feld enthält Newlines). Wenn Sie auf eine Situation stoßen, in der das Feld Newlines enthält, können Sie diese Zeichen verarbeiten, indem Sie die Flucht- und Gehäuseparameter von fGetCSV () ändern.

2. Prozessfelder mit Grenzwerten

Wenn das Feld selbst einen Trennzeichen (z. B. ein Komma) enthält, können Sie die Integrität des Feldes sicherstellen, indem Sie das entsprechende Gehäuse (z. B. Doppelzitate " festlegen. Dies ist auch Standardpraxis im CSV -Format.

 <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">// Prozessdaten für jede Zeile verarbeiten</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>

Zusammenfassen

Durch Festlegen der maximalen Länge des Feldes in der Funktion fGetCSV () können wir das Problem des Datenüberlaufs effektiv vermeiden. Unabhängig davon, ob die maximale Länge einer Linie festgelegt oder jedes Feld manuell abgeschnitten wird, können angemessene Längengrenzen sicherstellen, dass das Programm beim Lesen von CSV -Dateien stabiler und effizienter ist.

Die rationale Verwendung des Parameters von FGetCSV () und die Überprüfung der Feldlänge kann effektiv die Probleme mit dem Feldüberlauf vermeiden, wodurch die Robustheit und Zuverlässigkeit des Programms verbessert wird.