Maison > développement back-end > Problème PHP > PHP ne lit pas la première ligne de données txt

PHP ne lit pas la première ligne de données txt

PHPz
Libérer: 2023-05-07 14:11:09
original
616 Les gens l'ont consulté

Dans le développement PHP, la lecture de fichiers est une opération très courante. Cependant, nous rencontrons parfois une telle situation : bien que le fichier existe, lors de la lecture du fichier, nous constatons que la première ligne de données n'a pas été lue. Ce type de problème rend souvent les développeurs très confus et angoissés. Cet article aidera les développeurs à bien comprendre ce problème et à le résoudre en douceur en analysant la cause et la solution du problème.

1. Contexte du problème

En PHP, il existe de nombreuses façons de lire des fichiers. Les plus courantes consistent à utiliser la fonction file_get_contents() et la fonction fopen() pour lire des fichiers. Nous stockons généralement les informations du fichier à lire dans un tableau afin que les informations du fichier puissent être appelées à tout moment. Ce qui suit est un code PHP courant pour lire des fichiers :

<?php
$file = 'test.txt';
$content = file_get_contents($file);
$lines = explode("\n", $content);
?>
Copier après la connexion

Dans le code ci-dessus, nous définissons d'abord une variable $file pour stocker le nom du fichier à lire, puis utilisons la fonction file_get_contents() pour lire le fichier et stocker le contenu du fichier Stockez-le dans la variable $content, puis utilisez la fonction éclater() pour diviser la chaîne dans la variable $content en utilisant le délimiteur "n" comme condition pour générer un tableau $lines pour stocker chaque ligne de données dans le déposer.

Cependant, lorsque nous lisons un fichier, nous constatons parfois des phénomènes étranges, tels que seule la deuxième ligne du fichier et les données suivantes sont lues, mais la première ligne de données ne peut pas être lue avec succès.

2. Analyse du problème

La raison habituelle de ce problème est que lorsque le système d'exploitation lit un fichier texte, il ajoute par défaut une marque BOM (Byte Order Mark) au début du fichier. La marque consiste à indiquer au système d'exploitation de lire quel mode endian utiliser lors de la récupération des fichiers. Pour certains anciens systèmes d'exploitation ou certains logiciels non adaptés à l'encodage UTF-8, il est difficile de traiter des fichiers texte contenant des balises BOM. À l'heure actuelle, si nous utilisons des fonctions de lecture de fichiers telles que la fonction file_get_contents() ou la fonction fopen() de PHP pour lire ces fichiers avec des balises BOM, la première ligne de données ne sera pas lue.

3. Solution

Pour résoudre ce problème, nous pouvons adopter les solutions suivantes :

  1. Supprimer la marque de nomenclature

Nous pouvons utiliser un éditeur ou certains outils de traitement de texte pour ouvrir le fichier texte à lire, puis supprimer la marque BOM dans l'en-tête du fichier, enregistrez le fichier et téléchargez-le sur le serveur. Cela garantira que le fichier PHP ne sera plus affecté par la marque BOM lors de sa lecture.

  1. Utilisez une méthode de lecture spéciale

Si nous sommes sûrs que le fichier à lire porte une marque de nomenclature, nous pouvons utiliser une méthode de lecture spéciale pour lire le fichier de test. Plus précisément, nous pouvons utiliser certaines bibliothèques PHP tierces, telles que la fonction fread() pour lire le fichier texte, puis utiliser la fonction substr() pour supprimer le premier caractère (c'est-à-dire la marque BOM) de la chaîne lue, et. traitez enfin la chaîne dans un tableau. Ce qui suit est un morceau de code PHP qui traite les balises BOM :

<?php
$file = fopen("test.txt", "r");
$fcontents = fread($file, filesize("test.txt"));
fclose($file);

if(substr($fcontents, 0, 3) == pack("CCC",0xef,0xbb,0xbf)) {
  $fcontents = substr($fcontents, 3);
}

$lines = explode("\n", $fcontents);
?>
Copier après la connexion

Dans le code ci-dessus, nous utilisons la fonction fopen() pour ouvrir le fichier à lire, puis utilisons la fonction fread() pour lire le contenu du dossier entier. Ensuite, nous utilisons la fonction substr() pour vérifier si l'en-tête du fichier a une balise BOM. Si c'est le cas, utilisez la fonction substr() pour supprimer le premier caractère (c'est-à-dire la balise BOM) de $fcontents, et enfin utilisez la fonction substr(). Fonction éclater() pour La chaîne est divisée en un tableau $lines en fonction des lignes pour terminer l'opération de lecture du fichier texte.

  1. Convertir l'encodage du fichier au format UTF-8

Si nous ne pouvons pas supprimer la marque BOM dans les deux cas, nous pouvons envisager de convertir le format d'encodage du fichier source au format UTF-8 afin que lors de la lecture du fichier De cette façon, vous pouvez éviter l'impact de la marque BOM. Nous pouvons utiliser la conversion de symboles explicite du système Windows ou des outils tels que notepad++ pour convertir le fichier en codage UTF-8.

4. Résumé

Ce qui précède est une analyse détaillée des raisons et des solutions au problème selon lequel la première ligne de données ne peut pas être lue lorsque PHP lit un fichier. D'une manière générale, ce type de problème n'est pas difficile à résoudre. Il suffit de comprendre la cause du problème et d'adopter des solutions appropriées pour réussir à éviter l'impact de ce problème sur le programme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal