W3docs

fgetc()

La fonction fgetc() en PHP lit un seul caractère depuis un pointeur de fichier. Essentielle pour les développeurs web et administrateurs serveur.

Introduction à la fonction fgetc() en PHP

La fonction fgetc() en PHP lit exactement un caractère depuis un fichier ouvert et avance le pointeur de fichier d'un octet vers l'avant. Le nom signifie « file get character » (obtenir un caractère du fichier). Chaque appel retourne le caractère suivant, ce qui permet de parcourir un fichier caractère par caractère en appelant la fonction de manière répétée.

Vous ferez appel à fgetc() lorsque vous avez besoin d'un contrôle fin, caractère par caractère — par exemple, pour construire un petit analyseur syntaxique, compter des caractères spécifiques, ou vous arrêter dès que vous atteignez un octet particulier. Pour la lecture de fichiers courante, fgets() par lignes ou fread()/file_get_contents() pour un fichier entier sont plus rapides et plus simples, car chaque appel à fgetc() entraîne un surcoût d'appel de fonction. Savoir quand ne pas l'utiliser est aussi important que savoir comment l'utiliser.

Cette page couvre la syntaxe, les paramètres, la valeur de retour, des exemples exécutables et les pièges courants (notamment le piège "0" en fin de fichier).

Syntaxe

fgetc(resource $stream): string|false

La fonction prend un seul argument et retourne soit le caractère lu, soit false.

Paramètres

ParamètreRequisDescription
$streamOuiUn pointeur de fichier ouvert. Ce doit être une ressource valide retournée par fopen(), fsockopen(), popen(), ou une fonction similaire — pas un nom de fichier.

Le type resource reste entièrement pris en charge en PHP 8+. Aucune modification n'est nécessaire pour la compatibilité moderne.

Valeurs de retour

  • En cas de succès, retourne une string contenant un seul caractère lu depuis le fichier.
  • Retourne false lorsque la fin du fichier (EOF) est atteinte ou en cas d'erreur.

Exemples

Exemple 1 : Lire un seul caractère depuis un fichier

Cette opération lit uniquement le premier caractère du fichier. Vérifiez toujours que fopen() a réussi avant d'utiliser le handle, et appelez fclose() lorsque vous avez terminé.

<?php

$fileHandle = fopen('example.txt', 'r');
if ($fileHandle) {
    echo fgetc($fileHandle); // prints the first character
    fclose($fileHandle);
}

Exemple 2 : Lire un fichier entier caractère par caractère

Pour lire l'intégralité du fichier, appelez fgetc() dans une boucle et arrêtez-vous quand elle retourne false (EOF).

<?php

$fileHandle = fopen('example.txt', 'r');
if ($fileHandle) {
    while (($char = fgetc($fileHandle)) !== false) {
        echo $char;
    }
    fclose($fileHandle);
}

Ce code affiche chaque caractère du fichier jusqu'à la fin de fichier.

Pourquoi !== false est important (le piège du « 0 »)

Un bug très courant consiste à écrire la boucle avec une comparaison lâche :

// BUGGED: stops early on the first "0" or "" it reads
while ($char = fgetc($fileHandle)) {
    echo $char;
}

PHP traite les chaînes "0" et "" comme des valeurs fausses. Si votre fichier contient un caractère 0, cette boucle se termine là au lieu de continuer jusqu'à EOF. Utilisez toujours la comparaison stricte d'identité !== false afin que seule la vraie valeur EOF arrête la boucle. La même règle s'applique à fgets() et fread().

Exemple 3 : Compter les occurrences d'un caractère

Comme fgetc() vous donne un caractère à la fois, elle est pratique pour des comptages en flux continu sans charger l'intégralité du fichier en mémoire :

<?php

$fileHandle = fopen('example.txt', 'r');
$vowels = 0;
if ($fileHandle) {
    while (($char = fgetc($fileHandle)) !== false) {
        if (str_contains('aeiouAEIOU', $char)) {
            $vowels++;
        }
    }
    fclose($fileHandle);
    echo "Vowels: $vowels";
}

fgetc() vs fgets() vs fread()

FonctionLitÀ utiliser quand
fgetc()Un caractèreVous avez besoin d'un contrôle au niveau du caractère ou souhaitez vous arrêter à un octet spécifique
fgets()Une ligne (jusqu'à un retour à la ligne)Vous traitez du texte ligne par ligne
fread()Un nombre fixe d'octetsVous lisez des données binaires ou de grands blocs d'un coup

Pour les fichiers binaires, préférez fread() — boucler avec fgetc() fonctionne mais est bien plus lent par octet.

Notes et pièges

  • fgetc() fonctionne sur des flux sûrs pour les données binaires : elle retourne un octet même pour les caractères non textuels. Les caractères UTF-8 multi-octets s'étendent sur plusieurs octets, donc un seul appel à fgetc() peut ne retourner qu'une partie d'un tel caractère.
  • Ouvrez le fichier avec le bon mode ('r', 'rb', etc.) via fopen(), et n'oubliez pas de le fermer avec fclose().
  • Vous pouvez également tester la fin de fichier explicitement avec feof(), bien que comparer fgetc() à false soit généralement suffisant.

Conclusion

fgetc() lit un caractère à la fois depuis un pointeur de fichier ouvert et retourne false en fin de fichier, ce qui en fait un outil idéal pour l'analyse et le comptage au niveau des caractères. Retenez simplement les deux essentiels : passez une ressource ouverte depuis fopen(), et terminez votre boucle de lecture avec la vérification stricte !== false pour qu'un 0 littéral ne vous arrête jamais prématurément. Pour un traitement par lignes ou par blocs, préférez fgets() ou fread().

Pour en savoir plus sur la gestion des fichiers en PHP, consultez le guide Gestion des fichiers PHP.

Pratique

Pratique
Quelle est la fonction de fgetc() en PHP ?
Quelle est la fonction de fgetc() en PHP ?
Was this page helpful?