W3docs

fgetss()

La fonction fgetss() de PHP lit une ligne d'un fichier et supprime les balises HTML ou PHP. Apprenez son remplacement moderne.

Qu'est-ce que la fonction fgetss() ?

Important : fgetss() a été dépréciée en PHP 7.3 et supprimée en PHP 8.0. Elle déclenche une erreur fatale (Call to undefined function fgetss()) sur toute version moderne de PHP. Cette page documente ce qu'elle faisait et présente le remplacement supporté — fgets() combiné avec strip_tags() — afin que vous puissiez lire et migrer du code hérité.

La fonction fgetss() (abréviation de « file get string, strip ») lisait une seule ligne d'un fichier ouvert et supprimait toutes les balises HTML et PHP de cette ligne avant de la retourner. Elle se comportait exactement comme fgets() — lisant jusqu'à un saut de ligne, la longueur fournie ou la fin du fichier — avec une étape supplémentaire : les balises étaient supprimées à la sortie.

Elle était en pratique un raccourci pour strip_tags(fgets($handle)), ce qui explique précisément pourquoi PHP l'a retirée : le même résultat s'obtient par une composition évidente de deux fonctions bien connues, de sorte qu'une fonction dédiée apportait peu de valeur et était facile à mal utiliser pour des raisons de sécurité.

Voici la syntaxe qu'elle utilisait :

La syntaxe PHP de fgetss()

fgetss(resource $handle, int $length = ?, string $allowable_tags = ?): string|false
ParamètreDescription
handleUn pointeur de fichier retourné par fopen(). Requis.
lengthFacultatif. Le nombre maximal d'octets à lire. La lecture s'arrête à cette longueur, à un saut de ligne ou à la fin du fichier — selon ce qui survient en premier. Omettez-le pour lire toute la ligne.
allowable_tagsFacultatif. Une string de balises qui ne doivent pas être supprimées, par ex. "<b><i>".

Valeur de retour : la ligne suivante avec les balises supprimées, ou false lorsque la fin du fichier est atteinte ou en cas d'erreur.

Une erreur courante consistait à supposer que fgetss() nettoyait les entrées de façon sécurisée. Elle ne faisait que supprimer les balises via un analyseur simple — elle ne neutralisait jamais les attributs tels que onclick= ou les URL javascript:. Pour un échappement de sortie réel, utilisez htmlspecialchars(), et non la suppression de balises.

Comment lire et supprimer des balises en PHP ?

L'utilisation de la fonction fgetss() était similaire à l'utilisation de la fonction fgets(). Voici les étapes à suivre :

  1. Ouvrez le fichier à l'aide de la fonction fopen().
  2. Utilisez la fonction fgets() pour lire une ligne du fichier, puis appliquez strip_tags() pour supprimer toutes les balises.
  3. Fermez le fichier à l'aide de la fonction fclose().

Voici un exemple complet et autonome. Il écrit un petit fichier HTML, puis le relit ligne par ligne avec fgets(), en supprimant les balises de chaque ligne :

Comment utiliser fgets() et strip_tags() ?

<?php

// Create a sample file containing HTML so the example runs on its own
file_put_contents("demo.txt", "<h1>Hello</h1>\n<p>World</p>\n");

$file = fopen("demo.txt", "r");

// Loop until fgets() returns false (end of file)
while (($line = fgets($file)) !== false) {
    // Remove HTML/PHP tags from the line before printing
    echo strip_tags($line);
}

fclose($file);

Sortie :

Hello
World

Quelques remarques sur cette approche :

  • Testez la valeur de retour, pas feof(). Lire avec while (($line = fgets($file)) !== false) est plus robuste que while (!feof($file)), car feof() ne devient true qu'après un échec de lecture — l'ancienne boucle peut traiter une dernière lecture vide. L'utilisation d'une comparaison stricte !== false évite également de traiter une ligne légitime telle que "0" comme la fin du fichier.
  • Conservez certaines balises. fgetss() acceptait un argument allowable_tags ; strip_tags() aussi, donc la migration est directe : strip_tags($line, "<b><i>") conserve <b> et <i> tout en supprimant tout le reste.
  • Supprimer n'est pas assainir. Si vous affichez du contenu de fichier non fiable dans un navigateur, échappez-le avec htmlspecialchars() au lieu de (ou en plus de) supprimer les balises.

Lorsque vous avez terminé la lecture, libérez toujours le pointeur avec fclose().

Conclusion

La fonction fgetss() est obsolète : elle a été dépréciée en PHP 7.3 et supprimée en PHP 8.0, elle ne doit donc pas être utilisée dans du nouveau code. Pour lire un fichier ligne par ligne tout en supprimant les balises HTML ou PHP, combinez fgets() avec strip_tags() — passez un argument allowable_tags si vous avez besoin de conserver des balises spécifiques. Pour une véritable sécurité de sortie, utilisez htmlspecialchars(). Pour aller plus loin sur les entrées/sorties de fichiers, consultez fopen(), feof() et fclose().

Pratique

Pratique
Que fait la fonction fgetss() en PHP ?
Que fait la fonction fgetss() en PHP ?
Was this page helpful?