Maison >développement back-end >tutoriel php >Pourquoi ma boucle PHP `while (!feof())` ne lit-elle pas l'intégralité du fichier ?

Pourquoi ma boucle PHP `while (!feof())` ne lit-elle pas l'intégralité du fichier ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-06 13:07:12434parcourir

Why Doesn't My PHP `while (!feof())` Loop Read the Entire File?

La boucle PHP While (!feof()) ne produit pas de données complètes

Lors de la tentative de lecture et d'affichage de l'intégralité du contenu d'un .txt fichier utilisant une boucle while (!feof()), les utilisateurs peuvent rencontrer un problème où la boucle ne termine pas la sortie, sautant ou tronquant potentiellement la fin du fichier. Ce problème survient lorsque le test de fin de fichier (EOF) se produit avant l'opération de lecture finale.

Pour résoudre ce problème, il est recommandé de modifier la structure de la boucle pour effectuer la vérification EOF dans le cadre du processus de lecture. . Voici un extrait de code amélioré :

$handle = fopen("item_sets.txt", "r");

if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        $trimmed = trim($buffer);
        echo $trimmed;
    }
} else {
    echo 'Unexpected error opening file';
}
fclose($handle);

De plus, il est conseillé de gérer les erreurs explicitement plutôt que de les supprimer à l'aide de @. L'extrait de code amélioré :

$line_count = 0;

$handle = fopen("item_sets.txt", "r");

if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        $trimmed = trim($buffer);
        echo $trimmed;
        $line_count++;
    }
} else {
    echo 'Unexpected error opening file';
}
fclose($handle);

echo PHP_EOL.PHP_EOL.PHP_EOL.'Lines read from file = ' . $line_count;

Lors du test de ce code avec le fichier de données fourni, il produit le résultat correct, y compris la dernière entrée du fichier :

[aa_fade_revolver]weapon_revolver"          "1"

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!

Déclaration:
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